【发布时间】:2013-12-26 23:37:48
【问题描述】:
我的 x64 应用程序是用 /EHa 编译的,
我想保护我的代码免受访问冲突,但无论我的 SEH 和终止处理程序如何,应用程序进程似乎都会崩溃。
void my_se_translator(unsigned int, struct _EXCEPTION_POINTERS*) {
cout << "se_translator_called" << endl;
}
void my_terminate_handler() {
cout << "my_terminate_handler_called" << endl;
}
#pragma optimize("", off)
void test() {
int* k = nullptr;
int z = *k;
}
#pragma optimize("", on)
int main(int argc, char* argv[]) {
_set_se_translator(my_se_translator);
set_terminate(my_terminate_handler);
test();
return 0;
}
希望对为什么 _set_se_translator 在这种情况下不起作用的一个很好的解释?
【问题讨论】:
-
在哪个操作系统上?用哪个编译器?
-
操作系统:Windows,编译器:MSVC。
-
_set_se_translator用于设置将 Win32 异常转换为 C++ 异常的函数。也许行为正在得到优化,因为您的代码中没有 C++ 异常处理。使用__try/__except直接捕获 Win32 异常可能会更好。