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

  1. 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.
  2. 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 calls abort.