这主要是好奇心,但我一直在阅读Visual Studio在C ++ try-catch
构造中捕获SEH异常的历史。我一直在运行这个断言,即启用了/ GX标志的旧版本Visual Studio会“忽略”在C ++ catch
块中捕获结构化的Win32异常。
在使用/ GX标志构建时,Visual Studio 6.0在以下代码中何时进入catch块?
char * p = NULL;
try
{
*p = 'A';
}
catch(...)
{
printf("In catch\n");
}
在我自己的简单测试中,使用Visual Studio 6 + SP6程序执行暂停,并且没有未处理的异常,并且永远不会打印“In catch”。但是,有些文章(如this之一)让我相信可以输入catch
块。
答案 0 :(得分:0)
int main()
{
__try
{
int *pInt = NULL;
*pInt = 0;// throw some kind of exception
}
__except( EXCEPTION_EXECUTE_HANDLER )
{
DWORD dw = GetExceptionCode();
switch(dw)
{
case EXCEPTION_ACCESS_VIOLATION:
cout << "access violation\n";
break;
case EXCEPTION_INT_DIVIDE_BY_ZERO:
cout << "int divide by zero\n";
break;
case EXCEPTION_FLT_DIVIDE_BY_ZERO:
cout << "floating point divide by zero\n";
break;
// other cases
}
}
return 0;
}
多数民众赞成也许是我找到网络的唯一方式。
另外,我可以猜测即使你知道为什么处理这些例外并不好,仍然是来自这里的googlers,请阅读: