游戏中的C ++分段错误

时间:2013-06-18 12:33:10

标签: c++ segmentation-fault

我正在使用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
}

3 个答案:

答案 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();,它应该没问题。在隐藏堆栈展开期间将调用析构函数。