为什么要捕获访问冲突?

Pau*_*ulH 3 c++ error-handling access-violation

与C++异常不同,访问冲突表明您的应用程序运行时已被破坏,因此应用程序的状态未定义.在这种情况下最好的办法是退出你的应用程序(通常是因为它崩溃而为你完成).

我注意到可以捕获其中一个例外.例如,在Microsoft Visual C++中,您可以使用/EHa__try/__catch执行此操作.

那么,你想要抓住它们的原因是什么?据我了解,您的应用程序无法恢复.

Jer*_*fin 7

您可以从访问冲突中恢复.

例如,您可以通过分配一些地址空间来创建动态数组VirtualAlloc,但将其指向的内存标记为不存在.然后,当您尝试使用某些内存时,您将捕获访问冲突,映射访问发生的内存页,然后重新尝试导致违规的指令.

  • 当然,当你做这样深刻的魔术时,你和所有其他相关方都必须知道他们做了什么.否则,[坏东西](http://blogs.msdn.com/b/oldnewthing/archive/2006/09/27/773741.aspx)会发生. (4认同)

Mar*_*ins 6

一个原因可能是编写崩溃转储文件; 你可以更好地控制它,并能够写出你想要的确切类型.例如,在Windows中,您可以调用MiniDumpWriteDump来执行此操作.