我的程序中出现了这个异常:
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();
}
答案 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 详情。