造成segment fault,产生core dump的可能原因

转载 2013年12月04日 02:05:45

在程序运行的过程中,有的时候我们会遇到Segment fault(段错误)这样的错误。这种看起来比较困难,因为没有任何的栈、trace信息输出。该种类型的错误往往与指针操作相关。


1、内存访问越界

a) 由于使用错误的下标,导致数组访问越界

b) 搜索字符串时,依靠字符串结束符来判断字符串是否结束,但是字符串没有正常的使用结束符

c) 使用strcpy, strcat, sprintf, strcmp, strcasecmp等字符串操作函数,将目标字符串读/写爆。应该使用strncpy, strlcpy, strncat, strlcat, snprintf, strncmp, strncasecmp等函数防止读写越界。

2、 多线程程序使用了线程不安全的函数。

3、 多线程读写的数据未加锁保护。

对于会被多个线程同时访问的全局数据,应该注意加锁保护,否则很容易造成core dump

4、 非法指针

a) 使用空指针

b) 随意使用指针转换。一个指向一段内存的指针,除非确定这段内存原先就分配为某种结构或类型,或者这种结构或类型的数组,否则不要将它转换为这种结构或类型的指针,而应该将这段内存拷贝到一个这种结构或类型中,再访问这个结构或类型。这是因为如果这段内存的开始地址不是按照这种结构或类型对齐的,那么访问它 时就很容易因为bus error而core dump.

5、 堆栈溢出

不要使用大的局部变量(因为局部变量都分配在栈上),这样容易造成堆栈溢出,破坏系统的栈和堆结构,导致出现莫名其妙的错误。


在Linux系统下,如果程序中出现segment fault,如何可以让系统产生core dump文件?如何用gdb来跟踪出错的地方?

“任何你真正想得到的一定是值得坚持的!”
  • qq_33044095
  • qq_33044095
  • 2016年09月26日 20:46
  • 274

产生segment fault的原因及调试方法总结

段错误(以下定义摘自C专家编程) 段错误通常是由于解除引用一个未初始化或非法值的指针引起的。以发生频率为序,最终可能导致段错误的常见编程错误是: 1、坏指针错误:在指针赋值之前就用它来引用内存;或...
  • kangquan2008
  • kangquan2008
  • 2014年03月11日 21:31
  • 1961

Linux下c/c++开发之程序崩溃(Segment fault)时内核转储文件(core dump)生成设置方法

Linux下c/c++开发之程序崩溃(Segment fault)时内核转储文件(core dump)生成设置方法 Linux下c/c++开发程序崩溃(Segment fault)通常都是指针错误引起...
  • Emilio563
  • Emilio563
  • 2016年02月18日 02:05
  • 965

segment fault 的调试方法

Linux环境下段错误的产生原因及调试方法小结 最近在Linux环境下做C语言项目,由于是在一个原有项目基础之上进行二次开发,而且项目工程庞大复杂,出现了不少问题,其中遇到最多、花费时间最长...
  • trochiluses
  • trochiluses
  • 2014年09月09日 22:20
  • 1375

linux下生成core dump文件方法及设置 bug定位

linux下生成core dump文件方法及设置 博客分类:  Linux内容   core dump的概念: A core dump is the record...
  • u012803067
  • u012803067
  • 2017年11月22日 18:50
  • 199

python机器学习环境部署笔记

开这篇博客主要为了记录在机器学习环境部署的时候遇到的一些小问题,积少成多,也欢迎博友一起探讨补充。 问题一:scipy和tensorflow冲突 部署环境:CentOS7 python2.7 sc...
  • shouwangzhelv
  • shouwangzhelv
  • 2016年07月07日 16:56
  • 1666

linux下生成core dump文件方法及设置

 源自:http://andyniu.iteye.com/blog/1965571 core dump的概念: A core dump is the recorded state of th...
  • mrjy1475726263
  • mrjy1475726263
  • 2015年03月07日 14:27
  • 42326

Linux 下如何产生core文件(core dump设置)

今天在Linux下调试C程序时,出现段错误,习惯性的ls下当前目录,发现没有生成core文件。惊讶了一下,怎么回事?以前都会产生的啊,难不成是程序的问题?后来同事提醒是不是系统没有打开生成core d...
  • start000722
  • start000722
  • 2015年02月05日 16:43
  • 8393

Redhat Linux下如何生成core dump文件

使用C/C++语言开发程序时,当程序crash的时候产生core dump文件对于调试程序是很有帮助的。在Redhat Linux系统中默认是不生成core dump文件的,这是因为在/etc/pro...
  • educast
  • educast
  • 2014年12月12日 21:53
  • 1161

关于Segmentation fault (core dumped)几个简单问题的整理

转自:http://www.daifuxin.com/post%20cat_5%20user_4%202012%2002%2019%2027%2027%20/有的程序可以通过编译,但在运行时会出现Se...
  • SSSUUNNYY
  • SSSUUNNYY
  • 2013年08月29日 10:44
  • 1848
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:造成segment fault,产生core dump的可能原因
举报原因:
原因补充:

(最多只允许输入30个字)