AccessViolationException 异常处理

AccessViolationException

MSDN解释如下

在试图读写受保护内存时引发的异常。

当非托管或不安全代码试图读写未分配或不具有访问权限的内存空间时,就会产生访问冲突。这种情况通常因为指针具有错误的值而发生。并非所有通过错误指针的读写操作都会引发访问冲突,所以访问冲突通常指示已经通过错误指针进行多次读写操作,并且内存内容可能已损坏。因此,访问冲突几乎总是指示存在严重的编程错误。在 .NET Framework 2.0 版中,AccessViolationException 清楚地标识了这些错误。

在完全由可验证托管代码组成的程序中,所有引用都有效或者为空,因而不会产生访问冲突。AccessViolationException 只在可验证托管代码与非托管代码或非安全托管代码交互时才会引发。

此异常是 .NET Framework 2.0 版中新增的异常。在 .NET Framework 较早版本中,非托管代码或非安全托管代码中的访问冲突用托管代码中的 NullReferenceException 表示。当在可验证托管代码中取消空引用时,也会引发 NullReferenceException,这种情况的引发与数据损坏无关,且在 1.0 版或 1.1 版中无法区分这两种情况。

管理员可以允许所选择的应用程序恢复为 .NET Framework 1.1 版的行为。将下一行置于应用程序配置文件的 <runtime> 元素 节中:

<legacyNullReferenceExceptionPolicy enabled = "1"/>

==========================================================

调用触发的过程:

1.调用一个含有异常未处理的dll文件(API函数)

2.调用超图控件时候操作图层也会引发此类异常

开发平台:vs2010 旗舰版 语言C#.NET 4.0

==========================================================

触发此异常的现象:

1.运行代码时候会在异常处停止,F5、F10、F11都不能往下运行

2.运行debug程序会自动关闭

在运行在try catch语句中不可以捕获其异常信息

==========================================================

处理方法:

在运行项目下添加一个配置文件(App.config)在里面添加一个节点如下:

 <runtime>
    <legacyCorruptedStateExceptionsPolicy enabled="true" />
 </runtime>

在运行在try catch语句中可以捕获其异常信息

==========================================================

文章出处:http://msdn.microsoft.com/zh-cn/library/dd638517

==========================================================

总结:似乎是在.NET4.0里面出现的这个,需要继续对新的知识进行学习,补充自己的不足……

==========================================================

感谢:161902175(这是一个C++交流群)里的 :[CPSJ]水無月·真(102560356)、[C#/MFC]有钱(298096110)、[linux c/c+]MacKong<xk_814305164@qq.com>等协助解决此问题

原文地址:https://www.cnblogs.com/mingyan/p/2178663.html