Chinaunix首页 | 论坛 | 博客
  • 博客访问: 629154
  • 博文数量: 135
  • 博客积分: 5217
  • 博客等级: 大校
  • 技术积分: 1289
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-05 17:36
文章分类

全部博文(135)

文章存档

2016年(1)

2012年(5)

2011年(15)

2010年(63)

2009年(51)

分类: LINUX

2009-11-15 02:39:18


今天编程遇到了SIGSEGV错误,比较困惑,所以找了些资料,总结一下:
(1)官方说法是:
SIGSEGV — Segment Fault. The possible cases of your encountering this error are:
1.buffer overflow — usually caused by a pointer reference out of range.
2.stack overflow — please keep in mind that the default stack size is 8192K.
3.illegal file access — file operations are forbidden on our judge system.
 
(2)SIGBUS与SIGSEGV信号的一般区别如下:
1) SIGBUS(Bus error)意味着指针所对应的地址是有效地址,但总线不能正常使用该指针。通常是未对齐的数据访问所致。
2) SIGSEGV(Segment fault)意味着指针所对应的地址是无效地址,没有物理内存对应该地址。
  
(3)Linux的mmap(2)手册页
————————————————————————–
使用映射可能涉及到如下信号
SIGSEGV
    试图对只读映射区域进行写操作
SIGBUS
    试图访问一块无文件内容对应的内存区域,比如超过文件尾的内存区域,或者以前有文件内容对应,现在为另一进程截断过的内存区域。
————————————————————————–
 
弄清楚错误以后,就要查找产生错误的根源,一般我用以下两种方法:
(1)gcc -g 编译
     ulimit -c 20000
     之后运行程序,等core dump
     最后gdb -c core
     来查调用栈
(2)使用strace execfile,运行程序,出错时会显示那个系统调用错
阅读(2308) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~