Program terminated with signal 11, Segmentation fault

drinker_linux 2011-09-07 03:04:16
我的程序运行了有30天,突然有一天出现的崩潰,产生的core文件堆栈信息如下:

Program terminated with signal 11, Segmentation fault.
[New process 3410]
[New process 3411]
[New process 3306]
[New process 3305]
[New process 3304]
[New process 3299]
[New process 3297]
[New process 3259]
#0 0x0000003789a71d15 in _int_free () from /lib64/libc.so.6
(gdb) bt
#0 0x0000003789a71d15 in _int_free () from /lib64/libc.so.6
#1 0x0000003789a7273b in free () from /lib64/libc.so.6

请问各位,什么情况下会产生:Program terminated with signal 11, Segmentation fault.请大家给例几种情况好吗?谢谢。
我这边测到一种情况:char *p = NULL;
*p = 8;
此时就会报:Program terminated with signal 11, Segmentation fault.
我悬赏100来解决这个问题,请大家多多出招相助。
...全文
22046 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
jackyjkchen 2011-09-07
  • 打赏
  • 举报
回复
你的日志或者堆栈记录应该有你调用free的那个函数吧,检查一下
yuyan_linger 2011-09-07
  • 打赏
  • 举报
回复
就这一个地方有free的话 程序执行了这么久 是第一次调用process_task这个函数吗 什么时候会调用,把情况模拟一下 看能不能重现
yuyan_linger 2011-09-07
  • 打赏
  • 举报
回复
那这个指针指向的内存恐怕已经因为某些逻辑错误被破坏了
drinker_linux 2011-09-07
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 yuyan_linger 的回复:]

看下有没有重复delete之类的,看看相关的访问和修改的地方 是不是有逻辑错误
[/Quote]

重复delete的话,core文件里会报:signal 6,double free之类的。我确定没有重复free,就这一个地方有free。
yuyan_linger 2011-09-07
  • 打赏
  • 举报
回复
看下有没有重复delete之类的,看看相关的访问和修改的地方 是不是有逻辑错误
drinker_linux 2011-09-07
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xunxun1982 的回复:]

p 下tsk的值
剩下的jackyjkchen来答
[/Quote]

我已经p tsk值,都正常,而且我还:x/1600b tsk,甚至tsk地址指向的内容都正确我已经验证过了。
声明一下:tsk这个结构大小是:1488字节.
xunxun 2011-09-07
  • 打赏
  • 举报
回复
p 下tsk的值
剩下的jackyjkchen来答
drinker_linux 2011-09-07
  • 打赏
  • 举报
回复
是在free的时候产生的这种情况:更多的core文件堆栈信息如下:

Core was generated by `./ds_main'.
Program terminated with signal 11, Segmentation fault.
[New process 3410]
[New process 3411]
[New process 3306]
[New process 3305]
[New process 3304]
[New process 3299]
[New process 3297]
[New process 3259]
#0 0x0000003789a71d15 in _int_free () from /lib64/libc.so.6
(gdb) bt
#0 0x0000003789a71d15 in _int_free () from /lib64/libc.so.6
#1 0x0000003789a7273b in free () from /lib64/libc.so.6
#2 0x00000000004980fe in obt::cache_server_impl::check_task_tt (this=0x113fb2f0, task_tt={_M_node = 0x2aae1f53a710}, to_send=0x0)
at /home/OpenIPTV/trunk/p2pcore/server/dataserver/main/cache.cpp:891
#3 0x000000000049b04a in obt::cache_server_impl::handle_todo (this=0x113fb2f0) at /home/OpenIPTV/trunk/p2pcore/server/dataserver/main/cache.cpp:1002

堆栈信息说,崩到386行的delete tsk上了
385 void cache_server_impl::process_task(task *tsk){
386 delete tsk;
387 tsk = NULL;
388 return;
389 }

可是这里我也没有修改类型啊。
jackyjkchen 2011-09-07
  • 打赏
  • 举报
回复
看来是free的错误

有三种可能

1.越界访问

2.重复释放

3.修改了初始地址

最可能是第一种
xunxun 2011-09-07
  • 打赏
  • 举报
回复
就是非法修改地址之类的就会这样啊

你这个是free时出现的
看下哪里用到free了

70,017

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧