出现segment fault 错误的几种原因

segment fault 段异常各种原因
www.MyException.Cn 发布于:2012-11-26 11:48:50
浏览:24次 0

segment fault 段错误各种原因
一 造成segment fault,产生core dump的可能原因
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
堆栈溢出.不要使用大的局部变量(因为局部变量都分配在栈上),这样容易造成堆栈溢出,破坏系统的栈和堆结构,导致出现莫名其妙的错误。

时间: 2024-12-20 08:18:25

出现segment fault 错误的几种原因的相关文章

利用linux信号机制调试段错误(Segment fault)

在实际开发过程中,大家可能会遇到段错误的问题,虽然是个老问题,但是其带来的隐患是极大的,只要出现一次,程序立即崩溃中止.如果程序运行在PC中,segment fault的调试相对比较方便,因为可以通过串口.显示器可以查看消息,只要程序运行,通过GDB调试工具即可捕捉产生segment fault的具体原因.但是不知大家有没有想法,当程序运行在嵌入式设备上时,你所面临资源的缺乏,你没有串口打印信息,没有显示器可查看,你不知道程序运行的状态,如果程序的产生segment falut这种bug发生的周

一次php脚本出现段错误(Segment fault)的经历

今天在一台新服务器上cli运行一个php脚本,出现了Segment fault错误,第一感觉应该是某个扩展安装有问题 这段php代码是调用soap接口,查看soap扩展没啥问题,一时不知道是啥原因. 想到可以用gdb调试core文件,于是去安装了一下gdb  ,并执行以下命令:ulimit -c unlimited 再次执行果然产生了core.PID文件,用gdb php路径 core.PID提示没有调试信息. 这.... 问了三金锅,原来php编译的时候需要带上 --debug才行. 于是重新

段错误Segment Fault定位,即core dump文件与gdb定位

使用C++开发系统有时会出现段错误,即Segment Fault.此类错误程序直接崩溃,通常没有任何有用信息输出,很难定位bug,因而无从解决问题.今天我们介绍core dump文件,并使用gdb进行调试,以此来定位段错误问题.此文同时用以备忘. 一.core dump Core dump也称核心转储, 当程序运行过程中异常退出时, 由操作系统把程序当前的内存状况存储在一个core文件中, 称之为core dump文件. 系统默认不生成core dump文件,可以使用ulimit命令进行查看和设

【Z】段错误Segment Fault定位,即core dump文件与gdb定位

使用C++开发系统有时会出现段错误,即Segment Fault.此类错误程序直接崩溃,通常没有任何有用信息输出,很难定位bug,因而无从解决问题.今天我们介绍core dump文件,并使用gdb进行调试,以此来定位段错误问题.此文同时用以备忘. 一.core dump Core dump也称核心转储, 当程序运行过程中异常退出时, 由操作系统把程序当前的内存状况存储在一个core文件中, 称之为core dump文件. 系统默认不生成core dump文件,可以使用ulimit命令进行查看和设

Segment fault及LINUX core dump详解 (zz)

C 程序在进行中发生segment fault(core dump)错误,通常与内存操作不当有关,主要有以下几种情况: (1)数组越界. (2)修改了只读内存. (3)scanf("%d",n),n不是指针. …… 1. 前言: 有的程序可以通过编译, 但在运行时会出现Segment fault(段错误). 这通常都是指针错误引起的. 但这不像编译错误一样会提示到文件->行, 而是没有任何信息, 使得我们的调试变得困难起来. 2. gdb: 有一种办法是, 我们用gdb的step

关于Segmentation fault错误

今天写程序时候出现了Segmentation fault,在网上查了一些资料,基本上的原因是,非法的内存访问. 例如数组的越界,在循环操作时循环变量的控制问题,也有字符串拷贝时长度溢出,指针指向了非法的空间,还有就是申明一个指针,但却没有对其初始化,就直接引用,或者没有开辟内存空间就释放内存,下面是自己找的一些可能情况,当做提醒自己吧. 1.内存访问越界 a) 由于使用错误的下标,导致数组访问越界. b) 搜索字符串时,依靠字符串结束符来判断字符串是否结束,但是字符串没有正常的使用结束符. c)

关于Release下没有问题,Debug下出现Segment Fault

前言: 在项目开发中出现Release下跑程序没有问题,Debug下出现Segment Fault. 代码如下: void fun(int lines){ int* pA; if(pA==nullptr){ pA=new int[lines]; } memset(pA,0,sizeof(int)*lines); //Segment Fault } 原因: Debug下局部变量中指针没有初始化,而编译器给了pA一个随机值,导致在if判断的时候跳出语句块,没有成功new内存,而在后面进行memset

盘点网站百度快照回档或不更新的12种原因

相信很多站长朋友都遇到过网站百度快照回档或停滞不前的情况,那到底是由什么因素引起的呢?下面我总结了十种常见的因素,如果你的网站目前正常出现这种现象,那么可以看一下以下几种原因,且做出相应的修正. 1.网站内容长期不更新 很多网站特别是企业网站长期处于无人管理状态,网站的内容甚至半年都不更新一次,像这种站点,蜘蛛爬行的次数会慢慢减少,甚至是不爬行,导致网站百度快照回档或不更新. 2.网站标题经常改动 特别是一些新手站长,在自身搜索引擎蜘蛛比较缺乏的情况下建起的站点,在学习过程中发现自己的标题并不是

猎头不来找你的5种原因

如今,猎头们确实忙的不可开交.但如果他们没有给你回电话,可不仅仅是因为他们时间紧迫. 凯撒?乌略亚是马萨诸塞州沃尔瑟姆市猎头公司WinterWyman的资深猎头.他听到愤怒的求职者们抱怨最多的是,猎头们似乎对他们的电话视而不见.投递的简历杳无音信,确实令人懊恼,但乌略亚认为,根本原因不外乎以下五点: 1. 简历毫无亮点.乌略亚表示:"简历除了展示求职者的背景.经历和教育外,还可以展示求职者对细节的关注,甚至一个人的智商."他见过许多简历中有拼写错误.打印错误.信息不全,或者简历的格式令