Linux下报错:Segmentation fault.
遇到的问题:程序在读文件之后,准备执行fclose(fp);时,出现了如下错误:
Program received signal SIGSEGV, Segmentation fault.
解决方法:倒腾了好久,结果发现是一个小小的 & 在作祟。
原来把read( f, buff, nFileSize )
写成了read( f, &buff, nFileSize ),多了一个 & !
经验总结:
1.关于段错误(Segmentation fault):
所谓的段错误就是指访问的内存超出了系统所给这个程序的内存空间,通常这个值是由gdtr来保存的,他是一个 48位的寄存器,其中的32位是保存由它指向 的gdt表,后13位保存相应于gdt的下标,最后3位包括了程序是否在内存中以及程序的在cpu中的运行级别,指向的gdt是由以64位为一个单位的表,在这张表中就 保存着程序运行的代码段以及数据段的起始地址以及与此相应的段限和页面交换还有程序运行级别还有内存粒度等等的信息。一旦一个程序发生了越界访问,cpu 就会产生相应的异常保护,于是segmentation fault就出现了。
2.原因
在编程中以下几类做法容易导致段错误,基本是错误地使用指针引起的:
1)访问系统数据区,尤其是往系统保护的内存地址写数据,最常见就是给一个指针以0地址
2)内存越界(数组越界,变量类型不一致等) 访问到不属于你的内存区域
3)其他
因此,需注意:
①定义了指针后记得初始化,在使用的时候记得判断是否为NULL
②在使用数组的时候是否被初始化,数组下标是否越界,数组元素是否存在等
③在变量处理的时候变量的格式控制是否合理等
具体的解决方法可参考如下:
最新文章
- Java Reference简要概述
- 求System.arraycopy的用法
- 【腾讯Bugly干货分享】聊一聊微信“小程序”
- 二:C语言(分之结构)
- Android doc打开太慢
- COM组件(ATL篇)
- BUTTON标签和INPUT标签的区别【转】
- JavaScript入门基础
- PowerDesigner将PDM导出生成WORD文档
- Threading Module源码概述(三)
- 纯js滑动脚本
- PowerDesigner中NAME和COMMENT的互相转换,需要执行语句
- API 设计: RAML、Swagger、Blueprint三者的比较
- 【剑指offer】两个队列实现堆栈
- ios隐藏键盘的方式简单应用
- Qt 按名称查找子节点
- Python面试题(二)【转】
- flask 压缩json
- 201621123008 《Java程序设计》第八周学习总结
- 为Qemu aarch32添加BeautifulSoup4模块
热门文章
- IntelliJ IDEA 视频教程
- python-day3-内置函数与字符字节之间的转换
- Struts2中 ValueStack、ActionContext、ServletContext、request、session等 表格解析
- mybatis的使用及详解
- centos6.5 mysql忘记登入密码
- BZOJ 3876 支线剧情(有上下界的无源汇最小费用可行流)
- [HAOI2011][bzoj2301] Problem b [莫比乌斯反演+容斥原理+分块前缀和优化]
- Codeforces Round #320 (Div. 2) [Bayan Thanks-Round] D 数学+(前缀 后缀 预处理)
- C# 获取NTP远程同步时间
- 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---41