Segmentation fault 问题浅谈
来源:互联网 发布:蚕丝毛毯 知乎 编辑:程序博客网 时间:2024/05/21 10:41
今天调试程序时遇到了一个问题,当我用GDB调试程序时出现了Segmentation fault,以前没有遇到过,最后查看资料,有点明白了。
出现了Segmentation fault,基本上的原因是,非法的内存访问。例如数组的越界,在循环操作时循环变量的控制问题,也有字符串拷贝时长度溢出,指针指向了非法的空间,还有就是申明一个指针,但却没有对其初始化,就直接引用,或者没有开辟内存空间就释放内存,所以要检查申请空间时是否成功。。。
另外,在调试时会有这样的信息:Program terminated with signal SIGSEGV, Segmentation fault.
对于SIGSEGV这个信号,经常会和SIGBUS信号出现在一块,SIGBUS与SIGSEGV信号的一般区别如下:
1) SIGBUS(Bus error)意味着指针所对应的地址是有效地址,但总线不能正常使用该指针。 通常是未对齐的数据访问所致。
2) SIGSEGV(Segment fault)意味着指针所对应的地址是无效地址,没有物理内存对应该地址。
通常导致段错误的几个直接原因:
(1)解除引用一个包含非法值的指针。
(2)解除引用一个空指针(常常由于从系统程序中返回空指针,并未经检查就使用)。
(3)在未得到正确的权限时进行访问。
(4)用完了堆栈或堆空间(虚拟内存虽然巨大,但绝非无限)。
这些是我个人的一些看法,希望和大家交流。。。
出现了Segmentation fault,基本上的原因是,非法的内存访问。例如数组的越界,在循环操作时循环变量的控制问题,也有字符串拷贝时长度溢出,指针指向了非法的空间,还有就是申明一个指针,但却没有对其初始化,就直接引用,或者没有开辟内存空间就释放内存,所以要检查申请空间时是否成功。。。
另外,在调试时会有这样的信息:Program terminated with signal SIGSEGV, Segmentation fault.
对于SIGSEGV这个信号,经常会和SIGBUS信号出现在一块,SIGBUS与SIGSEGV信号的一般区别如下:
1) SIGBUS(Bus error)意味着指针所对应的地址是有效地址,但总线不能正常使用该指针。 通常是未对齐的数据访问所致。
2) SIGSEGV(Segment fault)意味着指针所对应的地址是无效地址,没有物理内存对应该地址。
通常导致段错误的几个直接原因:
(1)解除引用一个包含非法值的指针。
(2)解除引用一个空指针(常常由于从系统程序中返回空指针,并未经检查就使用)。
(3)在未得到正确的权限时进行访问。
(4)用完了堆栈或堆空间(虚拟内存虽然巨大,但绝非无限)。
这些是我个人的一些看法,希望和大家交流。。。
0 0
- Segmentation fault 问题浅谈
- Segmentation fault 问题浅谈
- Segmentation fault 问题浅谈
- Segmentation fault 问题浅谈
- Segmentation fault 问题浅谈
- Segmentation fault 问题浅谈
- Segmentation fault 问题
- 调试 Segmentation fault 问题
- Segmentation fault (core dumped)问题
- "zend_mm_heap corrupted"、"Segmentation fault"问题
- 关于Segmentation fault的问题
- Segmentation Fault
- Segmentation Fault
- Segmentation fault
- SEGMENTATION FAULT
- Segmentation fault
- segmentation fault
- segmentation fault
- 产品思维----感想
- Hadoop Pig学习笔记(一) 各种SQL在PIG中实现
- freemarker嵌入文件输出结果
- 黑马程序员_IO流
- 【Hibernate步步为营】--hql查询过滤器及相关聚合函数查询详解
- Segmentation fault 问题浅谈
- 第二十七天 春之细雨润物于无形 —Spring的依赖注入
- 个人爱好的活动
- StringTokenizer类的用法
- 免费文档资源:Win XP 打不开网上邻居的几种处理方法
- FileMode 枚举
- 控制台应用程序——随机数
- 语法分析
- 作为一个优秀程序必须了解的知识