处理MFC中的异常

时间:2010-09-23 16:59:55

标签: mfc exception-handling

我的程序中出现了这个异常:

  

0x0051cce0处的未处理异常   JSONDataParsing.exe:0xC0000005:   访问违规阅读位置   0x00000004

我尝试捕获异常,但没有用。我知道问题出在哪里。但是想知道如何捕获异常。我在发生异常的代码周围使用了try,catch块。

这是一个无法捕获的例外吗?

catch语句是:

catch (bad_alloc&)
        {
            TCHAR msgbuf[MAX_PATH];

            swprintf(msgbuf, L"bad_alloc \n");

            OutputDebugString(msgbuf);
        }
        catch (bad_cast&)
        {
            TCHAR msgbuf[MAX_PATH];

            swprintf(msgbuf, L"bad_cast \n");

            OutputDebugString(msgbuf);
        }
        catch (bad_exception&)
        {
            TCHAR msgbuf[MAX_PATH];

            swprintf(msgbuf, L"babad_exceptiond_alloc \n");

            OutputDebugString(msgbuf);
        }
        catch (bad_typeid&)
        {
            TCHAR msgbuf[MAX_PATH];

            swprintf(msgbuf, L"bad_alloc \n");

            OutputDebugString(msgbuf);
        }
        catch( CMemoryException* e )
        {

            TCHAR msgbuf[MAX_PATH];

            swprintf(msgbuf, L"CMemoryException \n");

            OutputDebugString(msgbuf);
            // Handle the out-of-memory exception here.
        }


        catch( CFileException* e )
        {

            TCHAR msgbuf[MAX_PATH];

            swprintf(msgbuf, L"CFileException \n");

            OutputDebugString(msgbuf);
            // Handle the file exceptions here.
        }

        catch( CException* e )
        {

            TCHAR msgbuf[MAX_PATH];

            swprintf(msgbuf, L"CException \n");

            OutputDebugString(msgbuf);
            // Handle the exception here.
            // "e" contains information about the exception.
            e->Delete();
        }

2 个答案:

答案 0 :(得分:1)

您只能使用特殊的try-catch处理程序捕获此类异常:

try
{
  // code that triggers such an exception. for example:
  int * a = NULL;
  *a = 0;
}
catch (...)
{
  // now that exception is handled here
}

但一般来说,这样做是不好的做法。相反,你不应该得到这样的例外,但检查你的参数和变量。

请点击此处了解更多详情: http://members.cox.net/doug_web/eh.htm

答案 1 :(得分:0)

可以使用__try -except语句捕获此类低级别异常,但您应该修复它的原因而不是报告它。在VS中,当调试命中CTRL + ALT + E并检查那里的所有异常时,继续运行您的应用程序直到异常发生。提示将停在违规行上。 看到 http://msdn.microsoft.com/en-us/library/s58ftw19.aspx 详情。