rse*_*thc 4 c++ try-catch access-violation
在C++中,是否有标准方法(或任何其他方式)来捕获由内存访问冲突触发的异常?
例如,如果出现问题且程序试图访问不应该访问的内容,您将如何收到错误消息,显示"内存访问违规!" 而不只是终止进程而不是向用户显示有关崩溃的任何信息?
我正在使用MinGW为Windows编写游戏,如果这有帮助的话.
zak*_*ter 10
Access violation是硬件异常,无法通过标准捕获try...catch.
由于硬件异常的处理是特定于系统的,因此在代码中捕获它的任何解决方案也将是特定于系统的.
在Unix/Linux上,您可以使用a SignalHandler来捕获SIGSEGV信号.
在Windows上,您可以使用该语句捕获这些结构化异常.__try/__except
这对您没有太大帮助,但是如果您使用以下命令进行编译,则可以使用...在 MSVC 中捕获访问冲突和其他 SEH 异常:trycatch(...)/EHa
#include <iostream>
int main() {
try {
*(int*)0 = 0;
}
catch (...) {
std::cerr << "Exception!\n";
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
Exception!
Run Code Online (Sandbox Code Playgroud)
唯一的缺点是你无法知道出了什么问题。要了解有关异常的更多信息,您可以使用_set_se_translator设置自定义 SEH 转换器函数,如本文中所示。
| 归档时间: |
|
| 查看次数: |
12966 次 |
| 最近记录: |