Вы получаете исключение SEH или Структурную обработку исключений. Эти исключения создаются Windows в совершенно другой системе, поскольку SEH предшествует C ++, и не могут быть перехвачены стандартным блоком перехвата C ++ (однако MSVC обеспечивает перехват SEH).
В качестве альтернативы, если вы работаете в Unix, ядро также не использует исключения C ++. Он использует сигналы. Я не претендую на понимание сигналов, так как я не разрабатываю для Unix, но я уверен, что они не являются исключениями C ++.
Вы нарушили аппаратное правило, запрещающее отмену ссылки на указатель NULL. Вы получите ошибку на уровне ОС, по исключению или по сигналу. Вы не можете поймать эти вещи в блоке C ++ catch просто так.
Редактировать: Если вы используете MSVC в Windows и недавно установили компилятор, вы можете включить / EHa, что позволяет вам перехватывать структурированные исключения, а также исключения C ++. Я написал этот код, который работает так, как показано:
int main() {
std::string string = "lolcakes";
try {
Something s;
int i, j;
i = 0; j = 1;
std::string input;
std::cin >> input;
if (input == "Structured")
int x = j / i;
else
throw std::runtime_error("Amagad hai!");
}
catch(std::runtime_error& error) {
std::cout << "Caught a C++ exception!" << std::endl;
}
catch(...) {
std::cout << "Caught a structured exception!" << std::endl;
}
return main();
}
Структурированные исключения включают нарушения прав доступа, ваша конкретная ошибка.