0

我正在使用 SDL 用 C++ 制作游戏。我的主要功能只是调用运行游戏功能。run game 函数运行游戏,退出时应返回 0。我试图在每次调用之前和之后打印一些东西,段错误应该发生在返回 0 上;

functioncall()
{

   Loads of SDL and other stuff

   SDL_Quit();
   gamestatemanager.~Gamestatemanager();
   return 0; // This is probably where i get the seg fault
}
4

3 回答 3

3

如果那是 的析构函数gamestatemanager,则不应显式调用它。

当对象系统清理您的对象时,它会被调用。

如果它被创建为具有以下内容的局部变量:

Gamestatemanager gamestatemanager;

然后它会在超出范围时被清理。如果它被分配了new,你应该delete它,此时它将被清理。

您可能在这里发现的是您自己调用了析构函数,然后当对象超出范围时再次调用它。这不太可能结束:-)

于 2013-06-18T12:35:37.740 回答
0

当对象超出范围时,会自动调用对象的析构函数。无需显式调用它。

int functioncall()
{
   Gamestatemanager gamestatemanager;
   ... 
   SDL_Quit();
   return 0;
} // The destructors for all local objects are called.
于 2013-06-18T12:39:09.420 回答
0

我想这gamestatemanager是一个局部变量。

您正在显式调用其析构函数,然后编译器再次隐式调用析构函数(同时在从 function 返回时“清理”堆栈functioncall()),这会导致分段错误。

摆脱gamestatemanager.~Gamestatemanager();它应该没问题。析构函数将在堆栈展开期间被隐式调用。

于 2013-06-18T12:40:08.620 回答