关于Segmentation fault错误
今天敲代码时候出现了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错误的更多相关文章
- onvif规范的实现:onvif开发常用调试方法 和常见的segmentation fault错误
在前几篇中,虽然已经实现了rtsp视频流的对接,但是还要做的工作还非常多,onvif本来就是一个覆盖面非常广的一个协议,每一个功能都要填充大量的函数.而且稍不注意就会出现segmentation fa ...
- cmder的segmentation fault错误修复
Segmentation fault 现场还原 问题出现的原因是我在 cmder的命令行里执行了cmder /register ALL命令,本意是把cmder放到右键菜单里去的 但我没想到的是,各种不 ...
- Segmentation Fault错误原因总结
最近在项目上遇到了Segmentation Fault的错误,一直调试不出来是哪里出了问题,对于刚接触嵌入式的,也不知道该如何去调试一个项目,定位内存问题,纠结了好几天,好阿红整理下自己的思路.从头开 ...
- 命令行登录mysql报Segmentation fault错误是怎么回事
==========解决方法============在源码包里,编辑文件 cmd-line-utils/libedit/terminal.c把terminal_set方法中的 char buf[TC_ ...
- centos yum Segmentation fault 问题解决办法
今儿在centos 使用yum 安装软件时出现了 ”Segmentation fault“ 错误提示,google一大把执行 yum clean all 命令后,再执行还是没用,最后把 zlib.x. ...
- 记一次PHP“Segmentation fault”调试经历
遇到的问题: 在linux上安装php5.5.26.phalcon2.0扩展.xhprof扩展,均正常安装,并可单独运行.但放在一起运行时出现“Segmentation fault”错误.注:xhpr ...
- linux backtrace()详细使用说明,分析Segmentation fault【转】
转自:http://velep.com/archives/1032.html 在此之前,开发eCos应用程序时,经常碰到程序挂掉后,串口打印输出一大串让人看不懂的数据.今天才明白,原来这些数据是程序挂 ...
- 用GDB调试Segmentation 段错误【转】
本文转载自:http://blog.csdn.net/learnhard/article/details/4879834 调试Linux程序的时候,出现Segmentation Fault是最郁闷的事 ...
- linux backtrace()详细使用说明,分析Segmentation fault
linux backtrace()详细使用说明,分析Segmentation fault 在此之前,开发eCos应用程序时,经常碰到程序挂掉后,串口打印输出一大串让人看不懂的数据.今天才明白,原来这些 ...
随机推荐
- NEFU 119
和上一题一样,注意除不尽为0 #include <iostream> #include <cstdio> #include <cstring> #include & ...
- leetcode dfs Palindrome Partitioning
Palindrome Partitioning Total Accepted: 21056 Total Submissions: 81036My Submissions Given a string ...
- QTP自带订票实现循环执行,參数化和将异常提示信息输出
做这个样例主要是为了积累一些较基础的知识,以便日后可參考学习 这个样例是一个订票的C/Sclient程序 一.业务需求: 1.实现异常和正常数据登录窗体,系统对数据进行校验 2.登录成功后.进行订票业 ...
- mybatis批量插入、批量删除
mybatis 批量插入 int addBatch(@Param("list")List<CustInfo> list); <insert id="ad ...
- 使用Swift和SpriteKit写一个忍者游戏
这篇文章的游戏使用SpriteKit和Swift语言来完毕. SpriteKit是苹果自己的游戏引擎,更能贴合iOS系统底层的API,只是架构和实现上都是模仿了Cocos2D.所以使用上事实上区别不大 ...
- hdu5592/BestCoder Round #65 树状数组寻找第K大
ZYB's Premutation Memory Limit: 131072/131072 K (Java/Others) 问题描述 ZYBZYB有一个排列PP,但他只记得PP中每个前缀区间的逆 ...
- mysqil操作数据库
mysqil操作数据库 每次用到mysql_connect连接数据库的时候都会提示: 1 Deprecated: mysql_connect(): The mysql extension is dep ...
- Linux就该这么学 20181008(第十三章BIND)
参考链接https://www.linuxprobe.com Bind提供域名解析服务 DNS Domin Name Server 域名解析服务 功能模式 .正向解析,将域名解析为IP地址 .反向解析 ...
- [十二省联考2019] 异或粽子 解题报告 (可持久化Trie+堆)
interlinkage: https://www.luogu.org/problemnew/show/P5283 description: solution: 显然有$O(n^2)$的做法,前缀和优 ...
- [jzoj 3175] 数树数 解题报告 (树链剖分)
interlinkage: https://jzoj.net/senior/#main/show/3175 description: 给定一棵N 个节点的树,标号从1~N.每个点有一个权值.要求维护两 ...