C++;博弈中的分段错误 我用SDL在C++中做了一个游戏。我有一个主函数,它只调用run游戏函数。运行游戏函数运行游戏,退出时应返回0。我尝试在每次呼叫前后打印内容,seg故障应该发生在返回0上 functioncall() { Loads of SDL and other stuff SDL_Quit(); gamestatemanager.~Gamestatemanager(); return 0; // This is probably where i get the seg fault }

C++;博弈中的分段错误 我用SDL在C++中做了一个游戏。我有一个主函数,它只调用run游戏函数。运行游戏函数运行游戏,退出时应返回0。我尝试在每次呼叫前后打印内容,seg故障应该发生在返回0上 functioncall() { Loads of SDL and other stuff SDL_Quit(); gamestatemanager.~Gamestatemanager(); return 0; // This is probably where i get the seg fault },c++,segmentation-fault,C++,Segmentation Fault,如果这是gamestatemanager的析构函数,则不应显式调用它 int functioncall() { Gamestatemanager gamestatemanager; ... SDL_Quit(); return 0; } // The destructors for all local objects are called. 当对象系统清理对象时,会调用它 如果它被创建为一个局部变量,如下所示: Gamestatemanager gamestatema

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

int functioncall()
{
   Gamestatemanager gamestatemanager;
   ... 
   SDL_Quit();
   return 0;
} // The destructors for all local objects are called.
当对象系统清理对象时,会调用它

如果它被创建为一个局部变量,如下所示:

Gamestatemanager gamestatemanager;
然后,当它超出范围时,它将被清理。如果分配了
new
,则应
delete
它,此时它将被清除


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

如果这是
gamestatemanager
的析构函数,那么不应该显式地调用它

int functioncall()
{
   Gamestatemanager gamestatemanager;
   ... 
   SDL_Quit();
   return 0;
} // The destructors for all local objects are called.
当对象系统清理对象时,会调用它

如果它被创建为一个局部变量,如下所示:

Gamestatemanager gamestatemanager;
然后,当它超出范围时,它将被清理。如果分配了
new
,则应
delete
它,此时它将被清除


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

当对象超出范围时,会自动调用该对象的析构函数。没有必要显式地调用它

int functioncall()
{
   Gamestatemanager gamestatemanager;
   ... 
   SDL_Quit();
   return 0;
} // The destructors for all local objects are called.

当对象超出范围时,会自动调用该对象的析构函数。没有必要显式地调用它

int functioncall()
{
   Gamestatemanager gamestatemanager;
   ... 
   SDL_Quit();
   return 0;
} // The destructors for all local objects are called.

我假设
gamestatemanager
是一个局部变量

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


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

我假设
gamestatemanager
是一个局部变量

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


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

只需让gamestatemanager退出作用域,而不是调用其析构函数。问题是什么?您可以通过new创建它,然后通过delete销毁它。删除对~gamestatemanager()的调用,看看这是否有帮助,如果没有,我们需要更多的代码。只需让gamestatemanager超出范围,而不是调用其析构函数。问题是什么?您可以通过new创建它,然后通过delete销毁它。删除对~gamestatemanager()的调用,看看这是否有帮助,如果没有,我们需要更多的代码。