【发布时间】:2013-05-12 19:44:32
【问题描述】:
在 C++ 中,是否有标准方法(或任何其他方法)来捕获由内存访问冲突触发的异常?
例如,如果出现问题并且程序试图访问它不应该访问的东西,您将如何收到一条错误消息显示“内存访问冲突!”而不是仅仅终止进程而不向用户显示有关崩溃的任何信息?
我正在使用 MinGW 为 Windows 编写游戏,如果有帮助的话。
【问题讨论】:
-
为什么有人要阻止试图修改受保护内存的狂暴程序终止?
-
通常您不会“捕捉”这些问题,而是首先通过调试器(例如 GDB)运行它们来修复它们。
-
我认为他只是想显示一个整洁的退出窗口而不是默认的操作系统窗口,然后让它终止。没有错。
-
没有一般的方法可以从中恢复。由于您甚至不知道此时调用堆栈是否正常,因此实际上不可能抛出 C++ 异常(必须展开堆栈并销毁相关对象)。此外,你会在处理程序中写什么你确定是安全的?
-
为了清楚起见:从 C++ 的角度来看,访问未分配的内存是未定义的行为,而不是例外。在操作系统级别可能有也可能没有例外,例如Windows 中的访问冲突或 Linux 中的分段错误。您也许可以按照 zakinster 的建议发出信号。
标签: c++ try-catch access-violation