catch(...) is not catching an exception, my program is still crashing
If a C++ catch(...)
block is not catching errors maybe it is because of a Windows error.
On Windows there is a concept called Structured Exception Handling which is where the OS raises "exceptions" when bad things happen such as dereferencing a pointer that is invalid, dividing by zero etc. I say "exceptions" because these are not C++ exceptions; rather these are critical errors that Windows defines in a C-style fashion - this is because Win32 was written in C so C++ exceptions were not viable.
See also:
- Difference between a C++ exception and Structured Exception
- try-except Statement
- Method of getting a stack trace from an
EXCEPTION_POINTERS
struct
Update based on comments
If you want both C++ exception handing and SEH perhaps you could try the following (untested) code:
__try
{
try
{
// Your code here...
}
catch (std::exception& e)
{
// C++ exception handling
}
}
__except(HandleStructuredException())
{
// SEH handling
}
Do you declare any global objects? If you have any objects created outside your main loop, that could explain why it is not caught ( it is not in your try-catch ).
If an exception is thrown by the destructor of an object that is destroyed as a result of the stack unwinding to handle a different exception, the program will exit, catch(...)
or not.
So far I know, there can be at least two situations where catch(...)
cannot actually catch
- More than 1 unhandled Exception: when an exception is raised before a previously occurred exception is handled, then c++ can not handle it, and application will crash.
- Throwing exception that is not in exception specification list: if any method throws an exception which is not in the exception specification list (in any) then
unexpected
will be called which callsabort
.