C#调用C++接口导致内存越界——引起程序崩溃

问题描述:

    接口调用后,功能正常,但是软件操作若干次后(单击界面、图像操作、图像浏览等任意操作),软件直接崩溃到C#程序入口处,错误提示中错误代码0x00000005,明显是内存访问越界等典型问题;

分析解决问题:

    但是检查代码并确认无内存泄漏(注意:不是内存泄漏的问题造成的,却朝着内存泄漏的方向走下去,结果就是无头绪),一次次确认都不行,但是注释掉接口函数内部所有代码,只保留return 0;就没有问题,于是开始清空所有脑袋中的思维定式,以重写接口函数的状态检查代码,突然发现,接口返回计算结果时,利用了指针作为形参,会不会是软件调用接口时申请的内存不够呢?

    于是检查接口调用,果然要求的数组必须17个元素,但是只申请了16个,典型的第一个元素标号为0导致的bug;那么问题就好解释了,内存被越界违法修改后,并不是马上就会对程序造成影响,当程序运行过程中用到被违法修改的堆内存时,程序直接崩溃,这就是为什么内存越界不会导致软件立刻崩溃在越界访问的函数部分,也就导致该问题难以定位。

总结:

    1.积累经验:指针作为函数参数的问题,容易导致内存越界访问;

    2.收获经验:遇到问题时容易着急试错,导致分析问题不彻底,思路不清晰,没有冷静的分析,导致了解决问题时的手足无措和毫无章法的试错,这里的错误代码0x00000005需要谨记!


猜你喜欢

转载自blog.csdn.net/xujie126/article/details/79564454
今日推荐