处理应用程序中的访问冲突
Handling access violation in applications
我的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在这种情况下不起作用?
从 MSDN 网站:
您的翻译器函数应该只抛出键入C++ 例外。如果它除了投掷之外还做任何事情(例如 写入日志文件,例如)您的程序可能不表现为 预期,因为转换器函数的次数 调用取决于平台。
添加简单异常类时:
class myException{
};
然后在 my_se_translator 函数中抛出异常,并在示例应该工作的 main 函数或测试函数中捕获异常。
void my_se_translator(unsigned int, struct _EXCEPTION_POINTERS*) {
std::cout << "se_translator_called" << std::endl;
throw myException();
}
int main(int argc, char* argv[]) {
_set_se_translator(my_se_translator);
set_terminate(my_terminate_handler);
try{
test();
}
catch(myException e) {
std::cout << "EXCEPTION!" << std::endl;
}
return 0;
}
相关文章:
- 使用 Bazel 编译 QT 应用程序时访问资源
- 引发未经处理的异常:简单 C++ 程序中的读取访问冲突,动态增加数组长度以存储数字
- 在链接的程序集文件中,我想从 c++ 调用代码访问变量.是否可以在不触发访问冲突的情况下执行此操作?
- 我们如何访问 Node.js 应用程序之外的内存?
- 使用 IPC 共享内存的应用程序是否可以访问彼此的代码?
- 访问使用 Bazel 构建的应用程序中的运行时文件
- 如何从桌面应用程序访问嵌入式ArangoDB
- 如何在不需要 root 访问权限的情况下为应用程序中的线程设置相对线程优先级
- 处理应用程序中的访问冲突
- c++单例类实例访问整个应用程序
- mfc应用程序结束后,CMainFrame的析构函数调用发生访问冲突
- 基于 SAPI 的应用程序在枚举令牌时引发内存访问冲突
- Wxwidget wxTimer 会导致应用程序关闭时出现随机访问冲突
- 访问冲突 在 C 应用程序中
- 在 .Net 应用程序中调用 C++ DLL 时出现系统访问冲突异常
- 我尝试访问win32应用程序中的空指针值,但没有发生访问冲突
- 如果应用程序以windows上的管理权限从cmd打开,则会出现访问冲突
- 访问计算机指针时发生访问冲突(c系统异常代码:c0000005),导致应用程序崩溃
- 访问其他应用程序的内存C++
- DLL设计:DLL需要访问一些应用程序的功能/数据