记录一个尝试读取或写入受保护的内存的错误
最近再调试线扫相机,发现不稳定,不是闪退就是内存受保护错误。这种错误基本都是和第三方DLL调用时候内存操作有关系,
闪退异常如下,闪退,我们的托管代码已经把几乎所有的异常都捕获了,为什么这个没有捕获到,这个肯定是非托管代码出了异常。
出现这种异常,一般是内存错位读取的错误,可能是非托管向托管拷贝数据,或者托管向非托管传递参数处理不当,本质就是内存读取越界。
这里最后查明白是自己初始化的内存buffer的宽度参数和第三方dll初始化内存时候的宽度参数不一致导致,如图所示
第三方的宽度是固定值12480(不可修改),我们配置的如果不是这个值,那么我们缓冲区buffer尺寸和第三方的buffer尺寸就不一致,导致从第三方拷贝数据时候不是闪退就是不稳定(不到5次就报内存受保护错误)
下图是第三方的内存初始化
这个是我们内存缓存Buffer的初始化图
拍摄到数据后调用委托,里面buffer对拷,如果长度不一致内存就会越界。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix