博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#尝试读取或写入受保护的内存,相机SDK指针托管内存转换图像问题
阅读量:5345 次
发布时间:2019-06-15

本文共 848 字,大约阅读时间需要 2 分钟。

网上找的比较有价值的回答:

C#遇到这种问题的亲们,

看一下你们是否运用到了unsafe模式下的非托管内存,是否有两个线程共同访问一个公共对象的情况。

在unsafe模式操作非托管内存的情况下,第一个线程使用完这个对象就把这个对象清空,这时候第二个线程正在使用这个对象,就会因为内存中找不到这个内存区域而报错:“尝试读取或写入受保护的内存。这通常指示其他内存已损坏”。

在C#托管内存中,内存回收一般是有GC自动完成的,如果遇到找不到找不到对象的情况,报错信息是“未将对象引用设置到对象的实例”,而非托管内存的找不到对象报错信息是:尝试读取或写入受保护的内存。这通常指示其他内存已损坏。

因为一个非托管对象的操作方式是指针,当内存中的对象被清理掉时,这段内存地址就拒绝指针随意访问,这事指针如果继续访问这段内存,就会报尝试读取或写入受保护的内存这个错误

---------------------
作者:佚名兄
来源:CSDN
原文:https://blog.csdn.net/yangwohenmai1/article/details/80980656
版权声明:本文为博主原创文章,转载请附上博文链接!

我的问题比较特殊

   我是在使用相机SDK采集图像后调用指针将图像转为HObject类型后,连续采集几次后,会提示内存已满报错,就是指针托管内存那边报错,随后就想着转换为Hobject后将指针清除,就用了下面的代码:

 

if (pData != IntPtr.Zero)     {Marshal.FreeHGlobal(pData);}

 

结果清除后,程序在使用图像报错:尝试读取或写入受保护的内存,这通常指示其他内存已损坏!

仔细看过了上面代码是清除托管内存,这就意味微存放图像的内存被释放了,自然再次使用会报警,但是不清除时间长会提示内存已满,最后是将清除内存的代码换了位置,解决了问题。

 

 

转载于:https://www.cnblogs.com/FHL007/p/11018575.html

你可能感兴趣的文章
CF1067C Knights 构造
查看>>
[BZOJ2938] 病毒
查看>>
webstorm修改文件,webpack-dev-server不会自动编译刷新
查看>>
Scikit-learn 库的使用
查看>>
CSS: caption-side 属性
查看>>
python 用数组实现队列
查看>>
认证和授权(Authentication和Authorization)
查看>>
Mac上安装Tomcat
查看>>
CSS3中box-sizing的理解
查看>>
传统企业-全渠道营销解决方案-1
查看>>
Lucene全文检索
查看>>
awk工具-解析1
查看>>
推荐一款可以直接下载浏览器sources资源的Chrome插件
查看>>
CRM product UI里assignment block的显示隐藏逻辑
查看>>
AMH V4.5 – 基于AMH4.2的第三方开发版
查看>>
Web.Config文件配置之配置Session变量的生命周期
查看>>
mysql导入source注意点
查看>>
linux下编译安装nginx
查看>>
ArcScene 高程不同的表面无法叠加
查看>>
[ONTAK2010] Peaks
查看>>