在C ++中,是否有一种标准方式(或其他任何方式)来捕获由内存访问冲突触发的异常?
例如,如果出现问题并且程序试图访问不应该访问的内容,那么如何显示错误消息“内存访问违规!”而不只是终止进程而不向用户显示有关崩溃的任何信息?
我正在使用MinGW为Windows编写游戏,如果这对任何人都有帮助的话。
答案 0 :(得分:10)
Access violation
是硬件异常,无法通过标准try...catch
捕获。
由于硬件异常的处理是特定于系统的,因此在代码中捕获它的任何解决方案也都是系统特定的。
在Unix / Linux上,您可以使用SignalHandler
来捕获SIGSEGV
signal。
在Windows上,您可以使用structured exception抓住这些__try/__except
statement。
答案 1 :(得分:2)
这对您没有多大帮助,但是如果您编译,则可以使用try
... catch(...)
在MSVC 中捕获访问冲突和其他SEH异常 与/EHa
:
<强> Live demo 强>
#include <iostream>
int main() {
try {
*(int*)0 = 0;
}
catch (...) {
std::cerr << "Exception!\n";
}
}
输出:
Exception!
唯一的缺点是你无法知道出了什么问题。要了解有关例外的更多信息,您可以使用_set_se_translator中的this article设置自定义SEH翻译器功能。