我想知道是否有一些方法可以在不导致segfault
或core dump
的情况下突然退出/终止某个程序。
我调查了terminate()
和exit()
以及return 0
。它们似乎都不适用于我的项目。
if(this->board.isComplete())
{
Utils::logStream << " complete "<< endl;
this->board.display();
exit(0);
//std::terminate();
//abort();
//raise(SIGKILL);
return true;
}
答案 0 :(得分:2)
exit()/abort()
和类似函数通常不是终止C ++程序的正确方法。正如您所注意到的,它们不会运行C ++析构函数,而是会打开文件流。如果你真的必须使用exit()
,那么用atexit()
注册一个清理函数是个好主意,但是,我强烈建议你切换到C ++异常。除了异常之外,还会调用析构函数,如果在终止之前要进行一些顶级清理,则可以始终在main()
上捕获异常,进行清理,然后使用错误代码正常返回。这也可以防止代码转储。
int main()
{
try
{
// Call methods that might fail and cannot recover.
// Throw an exception if the error is fatal.
do_stuff();
}
catch(...)
{
// Return some error code to indicate the
// program didn't terminated as it should have.
return -1;
}
// And this would be a normal/successful return.
return 0;
}