我正在使用SDL在c ++中制作游戏。我有主要功能女巫只需要运行游戏功能。运行游戏功能运行游戏,退出时应返回0。我试图在每次调用之前和之后打印东西,并且应该在返回0;
上发生seg错误functioncall()
{
Loads of SDL and other stuff
SDL_Quit();
gamestatemanager.~Gamestatemanager();
return 0; // This is probably where i get the seg fault
}
答案 0 :(得分:3)
如果那是gamestatemanager
的析构函数,你不应该明确地调用它。
当对象系统清理对象时会调用它。
如果它是作为局部变量创建的,例如:
Gamestatemanager gamestatemanager;
然后当它超出范围时将被清理。如果它已分配new
,您应该delete
它,此时它将被清除。
你可能在这里找到的是你自己调用析构函数,然后当对象超出范围时再次调用 。这不太可能结束: - )
答案 1 :(得分:0)
当对象超出范围时,将自动调用对象的析构函数。没有必要明确地调用它。
int functioncall()
{
Gamestatemanager gamestatemanager;
...
SDL_Quit();
return 0;
} // The destructors for all local objects are called.
答案 2 :(得分:0)
我认为gamestatemanager
是一个局部变量。
您正在显式调用它的析构函数,然后编译器再次隐式调用析构函数(在从函数functioncall()
返回时“清理”堆栈),这会导致分段错误。
摆脱gamestatemanager.~Gamestatemanager();
,它应该没问题。在隐藏堆栈展开期间将调用析构函数。