尝试读取或写入受保护的内存。这通常指示其他内存已损坏。 如何解决

.Net技术 码拜 9年前 (2015-07-18) 5534次浏览 0个评论

尝试读取或写入受保护的内存。这通常指示其他内存已损坏。尝试读取或写入受保护的内存。这通常指示其他内存已损坏。 如何解决
开发环境VS2010 C#winform程序 这里主要是绘三维图的渲染操作

#1

参数错误?

#2

可能是数据的问题,你对照每一项值是不是都对了

#3

不是参数问题 应该是内存释放问题 我不知道该怎么处理

#4

回复1楼:

不是参数问题 应该是内存释放问题 我不知道该怎么处理

#5

回复4楼:

你是调用别人的接口嘛?
还是做什么出现这个错误的?

这个错误一般的原因是因为 参数传入错误而引起的····

#6

回复5楼:

调用的别人的接口,做的三维图的渲染

#7

回复6楼:

仔细检查你的参数
对照别人提供的参数说明·······

#8

是不是前面调试的时候没有释放内存引起的.
在编写非托管代码,或者调用一些外部处理,引擎处理时请记得dispose

#9

这种情况下重启一下电脑看看先

#10

回复9楼:

就是有时候报错 有时候好的

#11

回复8楼:

dispose 放哪里

#12

回复11楼:

你的类继承IDispose,重写Dispose方法就可以了,这个方法里面用于清理内存,这个可以去参考一下微软帮助里面.比如关闭数据库连接等操作.

#13

回复11楼:

dispose用要类继承IDisposable接口的吧 这里没有

#14

确保当前的文件未被占用

#15

如果不是每次报错,
出错可能是相应的非托管对象被释放了,导致读取非法的地址
再找dll的开发人员咨询下,调用顺序或者其他的注意事项
20分

#16

呵呵,调用非托管代码,这是常见问题,见怪不怪。

同意 #15 楼的解决办法。懒得管这种事情,最好把问题推回给提供 dll 的那些“人员”。他们有本事提供 dll,没本事提供一个符合 .net 调用惯例的 dll,实在是拿他们没有办法。

忠告:不要调用这类 dll。你应让对方提供.net托管类库,然后用 c# 程序反复、改变方式测试几万次,证明确实不会出现此类问题才用。如果你不能坚持这个原则,你去调用对方不靠谱的非托管dll库,层出不穷的“内存被释放、非法使用地址”的问题是必然的。

#17

回复8楼:

不是你没有释放什么东西,是什么东西根本就提前释放了。比如说原本只能是 static 定义的东西,变为局部的了。

调用 c++ 编译的类库之类的东西,是件很垃圾的事情。过去我们的应用系统是c#开发的,然后一个“安全系统”是汇编和c++开发的(因为有 ring-0 级程序,也有用户程序)。花了500万也没有搞定产品质量。后来我决定要求c++开发部门必须提供托管代码.net类库,不能让应用程序开发者去直接调用c++类库,于是花了1万块钱就搞定产品质量了。

#18

回复17楼:

对提前释放更容易出错.

#19

回复14楼:

应该是的


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明尝试读取或写入受保护的内存。这通常指示其他内存已损坏。 如何解决
喜欢 (2)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!