MSDN.WhiteKnight - Stack Overflow answers
Ответ на "Перехват исключения при делении на 0"
Answer 843517
В Windows деление на ноль генерирует исключение SEH с кодом STATUS_INTEGER_DIVIDE_BY_ZERO (0xC0000094). Чтобы обрабатывать его в стиле исключений С++, можно установить в Visual C++ параметр компилятора /EHa, или установить фильтр необработанных исключений:
#include <stdlib.h> #include <stdio.h> #include <tchar.h> #include <exception> #include <windows.h> LONG WINAPI UnhandledExceptionFilter( struct _EXCEPTION_POINTERS *ExceptionInfo){ if(ExceptionInfo->ExceptionRecord->ExceptionCode == STATUS_INTEGER_DIVIDE_BY_ZERO) throw std::exception("STATUS_INTEGER_DIVIDE_BY_ZERO"); return EXCEPTION_CONTINUE_SEARCH; } int _tmain(int argc, _TCHAR* argv[]) { SetUnhandledExceptionFilter(&UnhandledExceptionFilter); int b=0; try { int a = 1/b; } catch(std::exception ex) { printf("Exception: %s\n",ex.what()); } return 0; }
(Второй способ работает только при запуске без отладки, так как отладчик студии принудительно прерывает программу на SEH-исключениях.)
Content is retrieved from StackExchange API.
Auto-generated by ruso-archive tools.