我有一个带有 try catch 块的函数,如下所示:
bool apple()
{
OutputDebugStringW(L"entered apple");
try {
SomeObj orange;
int a = global_b->num; // global_b is NULL
int b = global_b->someothernum; // global_b is NULL
}
catch(...) {
OutputDebugStringW(L"leaving apple due to exception");
return false;
}
OutputDebugStringW(L"leaving apple normally.");
return true;
}
在 DbgView 中有一次我看到了这个:
entered apple
leaving apple due to exception
leaving apple due to exception
该函数在 DllMain PROCESS_ATTACH 上调用。发生了什么?不幸的是,我重新编译了代码,当我将它改回它试图重现出现两次的异常消息时,我无法做到。
这是在使用 DbgView 4.79 的 Visual Studio 2010 SP1 中。有没有人见过他们使用 OutputDebugString 输出两次输出的东西?
编辑- 感谢那些回答这个问题的人。答案指出我不能依赖 NULL 指针异常。在 Visual Studio 中,我使用/EHa
将所有内容作为 C++ 异常捕获,这样如果我要包装的任何函数有任何问题,我都可以因异常而中止。如果我曾经/EHa
期望访问违规将被传递给 可以catch(...)
吗?我是这么想的。