转自于http://os.chinaunix.net/a2012/0130/1304/000001304535.shtml
1.什么是段错误?
所谓的段错误就是指访问的内存超出了系统所给这个程序的内存空间,通常这个值是由gdtr来保存的,他是一个48位的寄存器,其中的32位是保存由它指向的gdt表,后13位保存相应于gdt的下标,最后3位包括了程序是否在内存中以及程序的在cpu中的运行级别,指向的gdt 是由以64位为一个单位的表,在这张表中就保存着程序运行的代码段以及数据段的起始地址以及与此相应的段限和页面交换还有程序运行级别还有内存粒度等等的信息。一旦一个程序发生了越界访问,cpu就会产生相应的异常保护,于是segmentatiON
fault就出现了。
通过上面的解释,段错误应该就是访问了不可访问的内存,这个内存区要么是不存在的,要么是受到系统保护的。
2.那什么操作会引起段错误呢?
粗略的分一下类:
1)往受到系统保护的内存地址写数据
有些内存是内核占用的或者是其他程序正在使用,为了保证系统正常工作,所以会受到系统的保护,而不能任意访问。
2)内存越界(数组越界,变量类型不一致等)
3)其他
例如:
<1>定义了指针后记得初始化,在使用的时候记得判断是否为NULL
<2>在使用数组的时候是否被初始化,数组下标是否越界,数组元素是否存在等
<3>在变量处理的时候变量的格式控制是否合理等
3.那么我们如何去发现程序中的段错误呢?
通过学习前人的经验和开发的工具,不断的尝试和研究,找出更恰当的方法来避免、发现并处理它。对于一些常见的地方,我们可以避免,对于一些“隐藏”的地方,我们要发现它,发现以后就要及时处理,避免留下隐患。
用gdb来调试,在运行到段错误的地方,会自动停下来并显示出错的行和行号,gdb也是最常用的,如果需要用gdb调试,记得在编译的时候加上-g参数
分享到:
相关推荐
LINUX平台及应用中段试卷,这是我的复习资料。希望对学这门课的同学有帮助
该文档介绍Linux的内存管理、进程调度和中段处理等,适合Linux初学者。
本篇文章是对C语言中段错误的问题进行了详细的分析介绍,需要的朋友参考下
制浆中段废水污染特征研究,莫立焕,陈克复,研究了木浆和竹浆中段废水的污染特性。结果表明,制浆中段废水生化处理性很差,常规的活性污泥法对该废水的脱色效果不理想;pH值�
linux程序的段陆陆续续接触过一些,今天适当的总结一下,时间仓促,总结的比较零散。linux 段:text:已编译程序的机器代码。.rodata:只读数据。printf中的格式串,或者开关语句的跳转表。data:已初始化的全局变量...
如果可能的话,最好把一个中段声明为长类型。如果CPU接到一个中断,它就会停止一切工作(除非它正在处理一个更重要的中断,在这种情况下要等到更重要的中断处理结束后才会处理这个中断),把相关的参数存储到栈里,...
下五年级中段考试题.pdf
龙华城市建设投资发展有限公司清泉路中段施工组织设计方案.doc
中段坐标.dat
八年级下学期中段考试题及答案[下学期].doc
广东省2020届高三物理上学期中段考试试题(含解析).pdf
论文研究-基于离差最大化的导弹中段目标威胁度评估 .pdf,
我国农村小学中段数学运算律与简便运算能力培养的实践研究课题结题报告.doc
农村小学中段数学运算律及简便运算能力培养的实践研究报告课题结题报告.doc
部编人教版四年级上册中段试卷2019-副本(2).pdf
华北板块北缘中段早中二叠世的构造属性: 来自花岗岩类锆石U-Pb年代学及地球化学的制约,王挽琼,刘正宏,内蒙古温都尔庙南-铁沙盖黑云角闪石英闪长岩和角闪黑云花岗闪长岩位于华北板块北缘中段晚古生代构造岩浆活动...
小学数学中段游戏.doc
小学中段必背古诗.docx