LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 746|回复: 3

main()退出时报告和free()相关的错可能是什么原因?

[复制链接]
发表于 2005-11-17 11:07:17 | 显示全部楼层 |阅读模式
gdb调试如下:

  1. 146             return 0;
  2. (gdb) n
  3. 147     }
  4. (gdb) n
  5. 0x4016eb77 in __libc_start_main () from /lib/i686/libc.so.6
  6. (gdb) n
  7. Single stepping until exit from function __libc_start_main,
  8. which has no line number information.
  9. free(): invalid pointer 0x836eb30!

  10. Program exited normally.
复制代码

单步下来,直到main结束才报错。找不出出错具体对应的语句,debug无策...
哪位大侠指点一下?
自由狼-台风 该用户已被删除
发表于 2005-11-17 19:30:32 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

发表于 2005-11-17 21:35:57 | 显示全部楼层
多半是自己的程序写得有问题. 把代码贴出来看看吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-11-18 09:07:48 | 显示全部楼层
Post by kj501
多半是自己的程序写得有问题. 把代码贴出来看看吧

我也是这么想的。后来我一句句地核对(包括所有调用的函数),发现是一个函数里malloc了33个字节,却写了36个字节,可是gdb单步时在那个函数里却不报错。这也是我一直没有找出bug的原因。

结构大概是这样:在main里调用一个函数to_str,原型为
char* to_str(struct sth),将一个结构体转成字符串,在函数里根据struct各字段的长度(变长)malloc一定的空间,然后将这块地址返回。

多谢两位。二楼的兄台如果总结出好东东,也贴出来让大家分享一下。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表