Я изучаю исключения из книги и пытаюсь / ловлю, и ОС должна прекратить выполнение следующей программы.
В книге сказано, что должно появиться сообщение terminate called after throwing an instance of 'std::bad_alloc'
. Но не.
Я использую Arch Linux, и программа не останавливается. Он работает, заполняет ОЗУ немного линейно до тех пор, пока не будет (примерно на 90%), процессор работает много, но не зависает и не завершает работу. Это Windows только случай использования или как я могу воспроизвести ошибку в системе Linux / возможно Unix?
#include <iostream>
#include <exception> //c++ exception
int main()
{
int *feld;
int loop = 1;
for(;;) //infinite loop
{
std::cout << "Loop number: " << loop << '\n';
try
{
feld = new int[10000];
loop++;
if (durchlauf == 100000) //since c++11
std::terminate();
}
catch(...)
{
std::cout << "Error, Program done.\n";
break;
}
}
return 0;
}
РЕДАКТИРОВАТЬ: я обнаружил, что мой убийца OOM не работает должным образом с swap включено / вообще. Но у c ++ есть свой собственный вызов процесса завершения https://en.cppreference.com/w/cpp/error/terminate Он просто не выдает исключение для вывода строки перехвата. Кто-нибудь намекнул выдать прекращение улова?