Выход из программы без ошибок coredump или Segmentation Faults

Мне было интересно, есть ли какие-нибудь способы внезапного завершения / завершения программы, не вызывая 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

Решение

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

Другие решения


По вопросам рекламы [email protected]