C++ 在没有coredump或分段错误的情况下退出程序

C++ 在没有coredump或分段错误的情况下退出程序,c++,exit,terminate,quit,C++,Exit,Terminate,Quit,我想知道是否有一些方法可以在不引起segfault或core dump的情况下突然退出/终止程序 我查看了terminate()和exit()和返回0。它们似乎都不适用于我的项目 if(this->board.isComplete()) { Utils::logStream << " complete "<< endl; this->board.display(); exit(0); //std::terminate(

我想知道是否有一些方法可以在不引起
segfault
core dump
的情况下突然退出/终止程序

我查看了
terminate()
exit()
返回0
。它们似乎都不适用于我的项目

if(this->board.isComplete())
 {
     Utils::logStream << " complete "<< endl;
     this->board.display();
     exit(0);
     //std::terminate();
     //abort();
     //raise(SIGKILL);
     return true;
}
if(此->board.isComplete())
{
UTIL:UnLogStase

<代码> EXIT()/BABUTE()/<代码>,类似的函数通常不是终止C++程序的正确方法。正如您所注意到的,它们不运行C++析构函数,使文件流打开。如果您真的必须使用<代码> Ext(),然后注册清理函数是个好主意,但是,我强烈建议您切换到C++异常。使用异常,调用析构函数,如果在终止之前有一些顶级清理,则总是可以在代码>主()上捕获异常。

,执行清理,然后正常返回错误代码。这也可以防止代码转储

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

退出(0)
应该可以工作(对于大多数工作定义来说……这取决于是否有“需要”完成的关机操作)-尝试时会发生什么?@Tony D exit(0)似乎符合我问题的要求。但程序从未关闭它打开的文件。@Ben,你可能想澄清一下。目前来看,你的评论毫无意义。忘记释放内存本身不会导致segv。@Ben不,我相信我没有使用任何内存。如果是,我怎么能删除所有内存?@DavidO the exit(0)不提供SEGFULT有效,我一定是做错了什么。谢谢。我尝试了你的方法,它正按照我想要的方式工作。酷,一定要“接受”我的答案,@flyOverOthers;)