#c #try-catch
#c #попробуйте-поймайте
Вопрос:
Я провел этот тест, чтобы посмотреть, что произошло:
try
{
int *x = 0;
*x = 1234;
}
catch(...)
{
cout << "OK";
}
Но он выдает ошибку segfault, почему он не улавливает ошибку segfault?
Комментарии:
1. Ошибка сегмента — это сигнал, а не исключение?
2. @cheroky «Ошибка в сегменте — это сигнал, а не исключение?» ДА.
3. Кто-нибудь может скомпилировать и запустить с Visual C без get segfault?
Ответ №1:
Нет, вы не можете.
SEGFAULT
Не является обычным исключением.
Показываемый вами код — это просто неопределенное поведение, и может произойти что угодно. Нет гарантии, что в конечном итоге это приведет к возникновению исключения.
Ответ №2:
Этот ответ очень специфичен для WINDOWS.
Вы можете использовать Структурированную обработку исключений.
Вы должны вызвать «SetUnhandledExceptionFilter»https://msdn.microsoft.com/en-us/library/ms680634 (v= против 85).aspx
прототип использования:
Вы должны зарегистрировать функцию в начале приложения
SetUnhandledExceptionFilter(UnhandledExceptionFilterFunction);
Определите свою зарегистрированную функцию, ведите свой бизнес.
Обычно люди собирают дампы ядра и отправляют электронные письма команде разработчиков.
LONG WINAPI UnhandledExceptionFilterFunction(PEXCEPTION_POINTERS exception)
{
// The exception information is available in PEXCEPTION_POINTERS
}
Смотрите ссылку ниже для PEXCEPTION_POINTERS
https://msdn.microsoft.com/en-us/library/windows/desktop/ms679331 (v = против 85).aspx
Вот список записей исключений, которые вы получаете в «PEXCEPTION_POINTERS». Первый — «EXCEPTION_ACCESS_VIOLATION» (в терминах LINUX SEGFAULT)
https://msdn.microsoft.com/en-us/library/windows/desktop/aa363082 (v = против 85).aspx
Комментарии:
1. Я не вижу, как этот вопрос относится конкретно к Windows.
2. Я согласен. Вопрос не относится конкретно к Windows. Вот почему я упомянул самое первое в своем ответе. Но может помочь любому программисту Windows, который заходит на эту страницу.
3. Это также может заставить людей задуматься о том, почему нельзя в LINUX или UNIX-подобных системах.