示尝试读取或写入受保护的内存 这通常指示其它内存已损坏
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了示尝试读取或写入受保护的内存 这通常指示其它内存已损坏相关的知识,希望对你有一定的参考价值。
C# SearchAtPoint方法老是提示尝试读取或写入受保护的内存 这通常指示其它内存已损坏,怎么回事
此类错误屡见不鲜了,特别是图像开发,Com组件操作时,不要期望本文能够给你一个明确的答复,只能给你提供解决问题的思路:解决办法只有一种:慧眼视真或排除法,先看看排除的优先级吧:
1.如果你用了NativeCode的资源,例如:Com、ActiveX;
没有强制的释放方法,底层的com组件根据你进程调用组件的次数来控制对象的增加和释放(对象释放会延迟,com自身的问题)。
一般是调用强制垃圾回收或ao自带的回收对象的方法,效果不明显。
这种对象不释放的情况,通常出现在应用程序反复调用频率极高的情况下,调用间隔的时间小于对象回收的速度,将报这种错误。
通常是自己的程序写的机构不合理,才会产生这种情况。
自己在程序里强制释放COM资源,调用Marshal.ReleaseComObject()方法将不再使用的对象释放掉
并在可能出现异常的地方去Catch,并留下日志,转移此异常。
2.指示测试的可执行文件与 Windows 数据执行保护功能兼容。
调用dll的程序,在运行时会出现 “尝试读取或写入受保护的内存。这通常指示其他内存已损坏。"
有关更多信息,请参见 /NXCOMPAT(与数据执行保护兼容)。
编译器中加入了对DEP的安全性检查,在编译完后的exe文件中取消NXCOMPAT位可解决该问题
editbin.exe /NXCOMPAT:NO myexe
3.排除环境因素:例如.net Fx 2.0和 .net Fx 2.0 SP2差距很大的,当然其他环境因素也好考虑在内。
一定要排除开发和部署环境差异引起的问题。
4.如果是突然出现这个问题,最好是回滚到之前的操作,重做这个操作,例如移除控件,再次添加;
反注册Com,重新注册; 如果你安装了其他插件,卸除这些插件再试一试。
5.程序本身的问题。例如:数据库访问达到最大的并发量,出现死锁。或频繁的写入和读取操作,c#的垃圾回收机制造成的,即变量的回收速度大于使 用的速度造成的,这样就需要从新设计算法。 参考技术A 朋友,这是你的电脑“丢失”或“误删”了“系统文件”,或“系统文件”被病毒和“顽固”木马“破坏”,我给你7种方法:(答案原创,严禁复制)1.下载个:“360系统急救箱”或“金山急救箱”,(1)先“查杀”病毒,再删除后,“立即重启”!(2)重启开机后,再点开“隔离|恢复”,点:“彻底删除”病毒文件和“可疑自启动项”!(3)再点开“修复”,“全选”,再“修复”文件!(4)再点开:“恢复丢失的dll文件”,扫描一下,如果没有就行了!2。用“360安全卫士”的“扫描插件”,然后再“清理插件”,把它删除!3。再用“360杀毒双引擎版”,“全盘扫描”,病毒木马,再点删除!4。重启电脑后,来到“隔离区”,点“彻底删除”!5。用“360安全卫士”里“修复IE”,点击“使用360安全网址导航”,再“全选”,“一键修复”,“返回”!6.如果,以上方法不行,重启电脑,开机后,按F8,回车,回车,进到“安全模式”里,“高级启动选项”里,“最后一次正确配置”,按下去试试,看看效果!7.实在不行,做“一键还原”系统!(方法:我的百度空间的博客里有) 参考技术B 如果库是稳定的,那就是你参数传错了,尤其是指针参数更容易出现这个问题。
以上是关于示尝试读取或写入受保护的内存 这通常指示其它内存已损坏的主要内容,如果未能解决你的问题,请参考以下文章
System.AccessViolationException”类型的未经处理的异常在 System.Data.dll 中发生。其它信息:尝试读取或写入受保护的内存。这通常指示其它内存已损坏。(代码片
尝试读取或写入受保护的内存。这通常指示其他内存已损坏”的解决办法
System.AccessViolationException: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。