退出没有coredump或Segmentation Faults的程序

时间:2014-07-28 02:52:42

标签: c++ exit terminate quit

我想知道是否有一些方法可以在不导致segfaultcore 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;
}

1 个答案:

答案 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;
}