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

造成segmentation fault的可能原因分析(转),布布扣,bubuko.com

时间: 2024-08-10 21:22:38

造成segmentation fault的可能原因分析(转)的相关文章

eclipse+CDT调试segmentation fault错误

先来看两段代码-- 错误代码: #include "string.h" #include <stdlib.h> #include <stdio.h> void test(char ** dest, char * src, int n) { (*dest) = (char*) malloc(sizeof(char) * n); strcpy(*dest, src); } int main(int argc, char** args) { char ** p = N

strcat函数造成的段错误(Segmentation fault)

转自:http://book.51cto.com/art/201311/419441.htm 3.21  strcat函数造成的段错误 代码示例 int main() { char dest[7]="12345"; char* src = "abcdefghigklmnopqrstuvwxyz"; strcat(dest, src); cout << "dest:" << dest << endl; retur

linux Ubuntu(Segmentation fault)段错误出现原因及调试方法

  在linux下编译了一个程序,尝试运行的时候出现: Segmentation fault (core dumped) 初步确认为...完全不知道是什么玩意. 于是找度娘了. ---------------------------------------------------------------------------- 出现原因 原来这个东西叫做段错误,就程序运行的时候出现内存错误.有很多原因会导致这样的内存错误,但是应该把这些问题归结于程序的错误,那么程序是出现了什么样的错误了呢,为

再谈Segmentation fault (core dumped)问题 -查找段错误原因

再谈Segmentation fault (core dumped)问题 -查找段错误原因    在前一篇文章"Segmentation fault (core dumped) "有说了具体core dumped产生的原因. 下面主要来介绍下问题的解决与查找,在linux下一般都使用gdb进行调试,那今天我就以Ubuntu 14.04环境作为介绍 来查找正在的core dumped的原因.需要说明的是,你在编译程序的时候要加调试选项 -g. $ gcc -o app reverse.c

Segmentation Fault错误原因总结

最近在项目上遇到了Segmentation Fault的错误,一直调试不出来是哪里出了问题,对于刚接触嵌入式的,也不知道该如何去调试一个项目,定位内存问题,纠结了好几天,好阿红整理下自己的思路.从头开始. 以下内容只为整理来自己使用的,大多来源于网络,感谢大家的分享: http://www.cnblogs.com/no7dw/archive/2013/02/20/2918372.html http://blog.chinaunix.net/uid-20780355-id-538814.html

Segmentation Fault的一种定位方法

1. 介绍 网上有很多Segmentation Fault的调试方法,下面这篇文件就很好 <Linux环境下段错误的产生原因及调试方法小结> 然而笔者在实际的使用中由于各种原因总觉得不够用 于是在网上找到了一种个人觉得更直接的方法 2. 原理 Segmentation Fault发生的时候,程序收到了信号11(SIGSEGV) 我们捕获该信号,然后利用事故发生时保存的寄存器现场加上栈信息定位到具体行 这里参考了< C/C++捕获段错误,打印出错的具体位置(精确到哪一行) > 使用其

记一次PHP“Segmentation fault”调试经历

遇到的问题: 在linux上安装php5.5.26.phalcon2.0扩展.xhprof扩展,均正常安装,并可单独运行.但放在一起运行时出现“Segmentation fault”错误.注:xhprof是从github上下载的最新版. 遇到问题时的上下文: 1: 新建项目,使用phalcon命令行工具 phalcon create-project store 2:修改入口文件,加入xhprof支持 3:web访问出现502,无任何php级别的错误日志 在终端下执行:php index.php

记录一次apache错误:“child pid 29023 exit signal Segmentation fault (11)”

目前做了一台公网的测试机,主要是  php 5.3.3 版本,是 browser  --> nginx  --> apache --> php 今天因为想要安装一个商城,要求需要 Php >= 5.3.4 ,而且更重要的是需要 zendframework ,看到php的一个扩展为 eaccelear 顺手就安装了.悲剧出现了. 访问任何页面出现错误,检查 nginx 和 apache 的日志,都没发现问题,只是在 apche 的日志中有这么一条: child pid 29023 e

Linux 下的段错误(Segmentation fault)调试方法

我们在用C/C++语言写程序的时侯,内存管理的绝大部分工作都是需要我们来做的.实际上,内存管理是一个比较繁琐的工作,无论你多高明,经验多丰富,难免会在此处犯些小错误,而通常这些错误又是那么的浅显而易于消除.但是手工“除虫”(debug),往往是效率低下且让人厌烦的,本文将就"段错误"这个内存访问越界的错误谈谈如何快速定位这些"段错误"的语句. 下面将就以下的一个存在段错误的程序介绍几种调试方法: 1 dummy_function (void) 2 { 3 unsig