今天敲代码时候出现了Segmentation fault,在网上查了一些资料,基本上的原因是。非法的内存訪问。

比如数组的越界,在循环操作时循环变量的控制问题,也有字符串拷贝时长度溢出,指针指向了非法的空间。还有就是申明一个指针,但却没有对其初始化。就直接引用。或者没有开辟内存空间就释放内存,以下是自己找的一些可能情况。当做提醒自己吧。

1.内存訪问越界

a) 因为使用错误的下标,导致数组訪问越界。

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

c) 使用strcpy, strcat, sprintf, strcmp, strcasecmp等字符串操作函数。将目标字符串读/写爆。

应该使用strncpy, strlcpy, strncat, strlcat, snprintf, strncmp, strncasecmp等函数防止读写越界。

d)訪问系统数据区,尤其是往系统保护的内存地址写数据,内存越界(数组越界。变量类型不一致等) 訪问到不属于你的内存区域。

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

3. 多线程读写的数据未加锁保护。对于会被多个线程同一时候訪问的全局数据。应该注意加锁保护,否则非常easy造成core dump

4. 非法指针

a) 使用空指针

b) 任意使用指针转换。

一个指向一段内存的指针。除非确定这段内存原先就分配为某种结构或类型,或者这样的结构或类型的数组。否则不要将它转换为这样的结构或类型的指针,而应该将这段内存复制到一个这样的结构或类型中。再訪问这个结构或类型。这是由于假设这段内存的開始地址不是依照这样的结构或类型对齐的。那么訪问它时就非常easy由于bus error而core dump.

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

另一个个问题是在调试时会有这种信息:Program terminated with signal SIGSEGV, Segmentation fault.

对于SIGSEGV这个信号。常常会和SIGBUS信号出如今一块。

SIGBUS与SIGSEGV信号的一般差别例如以下:

1) SIGBUS(Bus error)意味着指针所相应的地址是有效地址,但总线不能正常使用该指针。
一般是未对齐的数据訪问所致。
2) SIGSEGV(Segment fault)意味着指针所相应的地址是无效地址,没有物理内存相应该地址。

关于Segmentation fault错误的更多相关文章

  1. onvif规范的实现:onvif开发常用调试方法 和常见的segmentation fault错误

    在前几篇中,虽然已经实现了rtsp视频流的对接,但是还要做的工作还非常多,onvif本来就是一个覆盖面非常广的一个协议,每一个功能都要填充大量的函数.而且稍不注意就会出现segmentation fa ...

  2. cmder的segmentation fault错误修复

    Segmentation fault 现场还原 问题出现的原因是我在 cmder的命令行里执行了cmder /register ALL命令,本意是把cmder放到右键菜单里去的 但我没想到的是,各种不 ...

  3. Segmentation Fault错误原因总结

    最近在项目上遇到了Segmentation Fault的错误,一直调试不出来是哪里出了问题,对于刚接触嵌入式的,也不知道该如何去调试一个项目,定位内存问题,纠结了好几天,好阿红整理下自己的思路.从头开 ...

  4. 命令行登录mysql报Segmentation fault错误是怎么回事

    ==========解决方法============在源码包里,编辑文件 cmd-line-utils/libedit/terminal.c把terminal_set方法中的 char buf[TC_ ...

  5. centos yum Segmentation fault 问题解决办法

    今儿在centos 使用yum 安装软件时出现了 ”Segmentation fault“ 错误提示,google一大把执行 yum clean all 命令后,再执行还是没用,最后把 zlib.x. ...

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

    遇到的问题: 在linux上安装php5.5.26.phalcon2.0扩展.xhprof扩展,均正常安装,并可单独运行.但放在一起运行时出现“Segmentation fault”错误.注:xhpr ...

  7. linux backtrace()详细使用说明,分析Segmentation fault【转】

    转自:http://velep.com/archives/1032.html 在此之前,开发eCos应用程序时,经常碰到程序挂掉后,串口打印输出一大串让人看不懂的数据.今天才明白,原来这些数据是程序挂 ...

  8. 用GDB调试Segmentation 段错误【转】

    本文转载自:http://blog.csdn.net/learnhard/article/details/4879834 调试Linux程序的时候,出现Segmentation Fault是最郁闷的事 ...

  9. linux backtrace()详细使用说明,分析Segmentation fault

    linux backtrace()详细使用说明,分析Segmentation fault 在此之前,开发eCos应用程序时,经常碰到程序挂掉后,串口打印输出一大串让人看不懂的数据.今天才明白,原来这些 ...

随机推荐

  1. 洛谷 U5737 纸条

    U5737 纸条 题目背景 明明和牛牛是一对要好的朋友,他们经常上课也想讲话,但是他们的班级是全校纪律最好的班级,所以他们只能通过传纸条的方法来沟通.但是他们并不能保证每次传纸条老师都无法看见,所以他 ...

  2. cogs 969. [NOIP2006] 数列

    969. [NOIP2006] 数列 ★☆   输入文件:sequenc.in   输出文件:sequenc.out   简单对比时间限制:1 s   内存限制:162 MB 题目描述 给定一个正整数 ...

  3. HDU 1757

    简单的矩阵构造题,参看我前几篇的谈到的矩阵的构造法. #include <iostream> #include <cstdio> #include <cstring> ...

  4. nyoj19(排列组合next_permutation(s.begin(),s.end()))

    题目意思: 从n个数中选择m个数,按字典序输出其排列. pid=19">http://acm.nyist.net/JudgeOnline/problem.php?pid=19 例: 输 ...

  5. 远程视频监控之驱动篇(LED)

    转载请注明出处:http://blog.csdn.net/ruoyunliufeng/article/details/38515205 之前一直在考虑该不该写这篇,由于我之前在博客里有写过LED的驱动 ...

  6. Android自己定义控件皮肤

    Android自己定义控件皮肤 对于Android的自带控件,其外观仅仅能说中规中矩,而我们平时所示Android应用中,一个简单的button都做得十分美观.甚至于很多button在按下时的外观都有 ...

  7. 【Hibernate步步为营】--单向关联一对一映射

    上篇文章对多对一的关联映射做了具体的分析,它在实现上能够有两种方式,而且这两种方式实现也非常easy,关键是标签<many-to-one>的使用,它分别指明了多端和一端的映射关系.这样的映 ...

  8. oracle 优化之组合索引

    组合索引适用场景: 1.适用在单独查询返回记录很多,组合查询后忽然返回记录很少的情况: 比如where 学历=硕士以上 返回不少的记录 比如where 职业=收银员 同样返回不少的记录 于是无论哪个条 ...

  9. BZOJ 3323 splay维护序列

    就第三个操作比较新颖 转化成 在l前插一个点 把r和r+1合并 //By SiriusRen #include <cstdio> #include <cstring> #inc ...

  10. 基于任务的编程模型TAP

    一.引言 在上两个专题中我为大家介绍.NET 1.0中的APM和.NET 2.0中的EAP,在使用前面两种模式进行异步编程的时候,大家多多少少肯定会感觉到实现起来比较麻烦, 首先我个人觉得,当使用AP ...