《遊戲編程入門》這書不錯~~~
但是 人無完人 有錯誤很正常。
DKink|棼紫
原來的 代碼是
void GameEngine::CleanupSprites()
{
// Delete and remove the sprites in the sprite vector
vector<Sprite*>::iterator siSprite;
for (siSprite = m_vSprites.begin(); siSprite != m_vSprites.end(); siSprite++)
{
delete (*siSprite);
m_vSprites.erase(siSprite);
siSprite--;
}
}
這個是清除Sprite 的 代碼,注意,這個 本身 沒什麼錯誤,但是m_vSprites.erase(siSprite);
執行過後iterator就無效了,VC6,VS2003,DEV C++都能正常編譯,但是vs2008下就不行了
修改後的代碼爲
void GameEngine::CleanupSprites()
{
// Delete and remove the sprites in the sprite vector
vector<Sprite*>::iterator siSprite;
for (siSprite = m_vSprites.begin(); siSprite != m_vSprites.end(); siSprite++)
{
delete (*siSprite);
}
m_vSprites.clear();
}
//=================================================
//或
void GameEngine::CleanupSprites()
{
// Delete and remove the sprites in the sprite vector
vector<Sprite*>::iterator siSprite;
for (siSprite = m_vSprites.begin(); siSprite != m_vSprites.end();)
{
delete (*siSprite);
siSprite = m_vSprites.erase(siSprite);
}
}
//=====================================================
似乎 VS2008 的要求 更加 嚴格了~