关于我们

质量为本、客户为根、勇于拼搏、务实创新

< 返回

内存怎么清理 尝试读取或写入受保护的内存?尝试读取或写入?

发布时间:2022-07-27 18:24:28
尝试读取或写入受保护的内存?尝试读取或写入?这种错误很常见,尤其是在图像开发、COM组件操作中,不要指望本文能给你一个明确的答案,只能为你提供解决问题的思路:内存怎么清理 尝试读取或写入受保
护的内存?尝试读取或写入?

解决方法只有一种:视觉还是排除,先看排除的优先级:

1。如果您使用nativecode资源,如com、ActiveX;

没有强制解释,底层com组件将根据进程调用组件的次数控制对象的增加和释放(对象释放将延迟,这是com本身的问题)。

一般调用强制垃圾回收的方法或者Ao自己的回收对象,效果不明显。

这类对象不释放,通常在应用程序中发生重复调用频率很高,调用间隔时间小于对象恢复速度,会报告此错误。

通常,导致这种情况的是编写自己程序的不合理组织。

释放程序中的com资源并调用Marshal.releasecom对象()方法释放不再使用的对象

并去捕捉可能发生异常的地方,留下一个日志来传输异常。

2.表示测试的可执行文件与windows的数据执行保护功能兼容。

CallDLL程序运行时,将出现“trytoreadorwriteprotectedmemory”。这通常表示其他内存已损坏。“

有关详细信息,请参阅/nxcompat(与数据执行保护兼容)。

编译器增加了DEP的安全检查,取消编译的EXE文件中的nxcompat位可以解决问题editbin.exe/NXCOMPAT:没有myexe

3.排除环境因素:例如,两者之间有很大的差距。净外汇2.0和。净外汇2.0SP2。当然,其他环境因素也应该考虑在内。

确保消除因开发和部署环境的差异而导致的问题。

4.如果此问题突然出现,最好回滚到上一个操作并重新执行该操作,例如删除控件并再次添加;

取消com注册并重新注册;如果已安装其他插件,请删除它们并重试。

5.程序本身的问题。例如:数据库访问的最大并发量、死锁。或者频繁的读写操作,造成的垃圾收集机制是C#,即变量收集的速度快于使用的速度,因此需要重新设计算法。

请问调用DLL,报错

一般来说,如果DLL文件本身没有损坏,则写入或读取是非法的,例如读取超出界限的共享数组。

如果DLL损坏,请用DLL替换。例如,一些游戏错误需要重新加载C运行时等等。过了很长一段时间,这东西就会损坏。


/template/Home/DawnNew/PC/Static

立即注册风纳云账号,免费体验多款产品

立即注册