SDL_FreeSurface(sprite)
如果我没有在我和结束程序之前调用a ,我SDL_Quit()
会泄漏吗?还是退出总是释放它?如果它崩溃了怎么办?我想知道在它崩溃的情况下,然后cleanup()
不会被调用。我的清理工作是否应该始终在析构函数中?没有清理功能,除非我想在游戏中释放一些纹理?
它说将 NULL 传递给 是安全的
SDL_FreeSurface()
,我添加了一个 NULL 检查,但它还是崩溃了。我认为崩溃是因为我需要在 SDL_FreeSurface() 之后手动将 sprite 设置为 NULL?它可能不相关,(似乎没有修复它)但常见问题解答说:“您需要将 SDL_INIT_NOPARACHUTE 标志传递给您对 SDL_Init() 的调用以使 msvc 调试器工作。”
注意:我尽可能使用 c++(不是 c)代码。我找到的答案是使用 c 代码。
class Game {
public:
#...
private:
SDL_Surface* screen;
SDL_Surface* sprite;
};
Game::Game()
{
done = false;
sprite = NULL;
screen = NULL;
}
Game::~Game()
{
if(sprite != NULL){
cout << "Somehow sprite still exists, freeing now." << endl;
SDL_FreeSurface(sprite);
}
}
bool Game::init(){
SDL_Init( SDL_INIT_EVERYTHING );
if((screen = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE | SDL_DOUBLEBUF)) == NULL){
return false;
}
sprite = SDL_LoadBMP("sprite.bmp");
if(sprite == NULL) {
return false;
}
return true;
}
void Game::cleanup() {
SDL_FreeSurface(sprite);
SDL_Quit();
}
int Game::run() {
if(init() == false) {
return -1;
}
loop();
cleanup();
return 0;
}
int main(int argc, char *argv[]){
Game g;
return g.run();
}