免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2033 | 回复: 2
打印 上一主题 下一主题

程序开发中碰到double free的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-05-10 11:24 |只看该作者 |倒序浏览
环境说明:
linux AS 3

$ uname -r
2.6.9-1.667

程序运行时报*** glibc detected *** free(): invalid pointer: 0x0912d1d0 ***

gdb跟踪信息:
$ gdb $HOME/bin/mydulv1 core.30872
malloc: using debugging hooks
GNU gdb Red Hat Linux (6.1post-1.20040607.41rh)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i386-redhat-linux-gnu"...Using host libthread_db lib
rary "/lib/tls/libthread_db.so.1".

Core was generated by `mydulv1 -s system01.dbf -d demo01.dbf demo02.dbf'.
Program terminated with signal 11, Segmentation fault.
Reading symbols from /etc/libcwait.so...done.
Loaded symbols for /etc/libcwait.so
Reading symbols from /lib/tls/libm.so.6...done.
Loaded symbols for /lib/tls/libm.so.6
Reading symbols from /lib/tls/libc.so.6...done.
Loaded symbols for /lib/tls/libc.so.6
Reading symbols from /oracle/product/10.1.0/db_1/lib/libclntsh.so.10.1...done.
Loaded symbols for /oracle/product/10.1.0/db_1/lib/libclntsh.so.10.1
Reading symbols from /lib/ld-linux.so.2...done.
Loaded symbols for /lib/ld-linux.so.2
Reading symbols from /oracle/product/10.1.0/db_1/lib/libnnz10.so...done.
Loaded symbols for /oracle/product/10.1.0/db_1/lib/libnnz10.so
Reading symbols from /lib/libdl.so.2...done.
Loaded symbols for /lib/libdl.so.2
Reading symbols from /lib/tls/libpthread.so.0...done.
Loaded symbols for /lib/tls/libpthread.so.0
Reading symbols from /lib/libnsl.so.1...done.
Loaded symbols for /lib/libnsl.so.1
#0  0x00aef843 in _int_realloc () from /lib/tls/libc.so.6

(gdb) where
#0  0x00aef843 in _int_realloc () from /lib/tls/libc.so.6
#1  0x00af218b in realloc_check () from /lib/tls/libc.so.6
#2  0x00af3b8c in tr_reallochook () from /lib/tls/libc.so.6
#3  0x00af064c in realloc () from /lib/tls/libc.so.6
#4  0x08051064 in dulora2c (S_colinfo=0x925a24c, S_coldata=0xfeff1bdc)
   at dulcom.c:1779
#5  0x0804cbf2 in duldealrowdata (S_rowdata=0xfeff1b90, S_dict=0x925a020,
   tabnum=0, output=0x0, S_useropt=0xfeff48a0) at duldata.c:1531
#6  0x0804ae97 in dulblkdata (fp=0x9253008, blockid=21474,
   S_useropt=0xfeff48a0, S_dict=0x925a020, output=0x0) at duldata.c:860
#7  0x0804a812 in dulextdata (S_extlst=0xfeff2640, S_useropt=0xfeff48a0,
   S_dict=0x925a020, output=0x0) at duldata.c:669
#8  0x0804a6ba in dulsegment (fp=0x9253008, blockid=481, S_useropt=0xfeff48a0,
   S_dict_user=0x0, output=0x0) at duldata.c:606
#9  0x08049ffc in duldictobj (S_useropt=0xfeff48a0) at duldata.c:421
#10 0x080493a1 in duldata (S_useropt=0xfeff48a0) at duldata.c:69
#11 0x08049108 in main (argc=6, argv=0xfeffb014) at mydul.c:101

由于程序比较复杂,在这里也说不清楚,我用mtrace跟踪,然后查看跟踪文件,malloc和free地址都是相对应的,真是搞不懂是什么问题了,有没有人碰到同样的问题,是不是linux as 3的bug

论坛徽章:
0
2 [报告]
发表于 2006-05-10 11:28 |只看该作者
以上gdb结果是设置了MALLOC_CHECK_=1后,程序运行出来core的结果,运行中不停的报double free,请高手指教,谢谢

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
3 [报告]
发表于 2006-05-10 17:11 |只看该作者
free(p); p = NULL;

是个不错的主意, 不过也仅仅是不错而已...

malloc/free 的使用还是要程序员自己注意了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP