您尚未登录。

楼主 #1 2017-11-29 22:01:24

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,224
积分: 9197

今天调一个解码程序,在内存释放free()的位置翻了, 有没有大神遇到过?

在Linux用QtCreator + gdb 调试,发现free 出现异常:

QQ20171129215739.png

在命令行下运行提示:

*** Error in `./test': free(): invalid next size (normal): 0x00000000023c4b80 ***
Aborted (core dumped)





离线

楼主 #2 2017-11-29 22:08:10

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,224
积分: 9197

Re: 今天调一个解码程序,在内存释放free()的位置翻了, 有没有大神遇到过?

我的第一感觉是 多次 free 申请的内存, 然后断点到所有 free函数位置, 并没有发现不妥。
继续跟踪。。。





离线

楼主 #3 2017-11-29 22:16:06

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,224
积分: 9197

Re: 今天调一个解码程序,在内存释放free()的位置翻了, 有没有大神遇到过?

只能想办法移植到 VC上了, 发现VC2010对C99支持不好,好不容易VC2013编译成功,
以为能顺利找出 free bug的问题,
然而比想象中难多了.

QQ20171129221351.png





离线

楼主 #4 2017-11-29 22:21:25

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,224
积分: 9197

Re: 今天调一个解码程序,在内存释放free()的位置翻了, 有没有大神遇到过?

QQ20171129221725.png
放狗一搜,终于找到一点有用的了, 原来是写 image这块动态内存越界了。

idx = (info_header.height-_y)*info_header.width + _x;

改成这样 ===>

idx = (info_header.height- 1 - _y)*info_header.width + _x;

终于把问题解决了!





离线

#5 2018-06-19 18:41:34

19697805
会员
注册时间: 2018-06-19
已发帖子: 77
积分: 72

Re: 今天调一个解码程序,在内存释放free()的位置翻了, 有没有大神遇到过?

谢谢分享,活到老学到老

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn