记录一个尝试读取或写入受保护的内存的错误

最近再调试线扫相机,发现不稳定,不是闪退就是内存受保护错误。这种错误基本都是和第三方DLL调用时候内存操作有关系,

闪退异常如下,闪退,我们的托管代码已经把几乎所有的异常都捕获了,为什么这个没有捕获到,这个肯定是非托管代码出了异常。

出现这种异常,一般是内存错位读取的错误,可能是非托管向托管拷贝数据,或者托管向非托管传递参数处理不当,本质就是内存读取越界。

这里最后查明白是自己初始化的内存buffer的宽度参数和第三方dll初始化内存时候的宽度参数不一致导致,如图所示

第三方的宽度是固定值12480(不可修改),我们配置的如果不是这个值,那么我们缓冲区buffer尺寸和第三方的buffer尺寸就不一致,导致从第三方拷贝数据时候不是闪退就是不稳定(不到5次就报内存受保护错误)

下图是第三方的内存初始化

 

这个是我们内存缓存Buffer的初始化图

 

拍摄到数据后调用委托,里面buffer对拷,如果长度不一致内存就会越界。

 

 

posted @ 2022-08-23 19:58  LearningAlbum  阅读(495)  评论(0编辑  收藏  举报