欢迎来到天天文库
浏览记录
ID:1249798
大小:51.50 KB
页数:7页
时间:2017-11-09
《攀上富亲戚之:segmentation fault》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、攀上富亲戚之:segmentationfault坚持确实不好坚持,但是还是要坚持,向Ju学习。最近接触Linux,好像刚攀上个富亲戚的感觉,可是和富亲戚感觉有点生疏。二手转的资料转自:http://blog.sina.com.cn/s/blog_4d3a41f40100ejlh.htmlSegmentfault之所以能够流行于世,是与Glibc库中基本所有的函数都默认型参指针为非空有着密切关系的。来自:http://oss.lzu.edu.cn/blog/article.php?uid_7/tid_700.html#comment背景 最近一段时间在
2、linux下用C做一些学习和开发,但是由于经验不足,问题多多。而段错误就是让我非常头痛的一个问题。不过,目前写一个一千行左右的代码,也很少出现段错误,或者是即使出现了,也很容易找出来,并且处理掉。 那什么是段错误?段错误为什么是个麻烦事?以及怎么发现程序中的段错误以及如何避免发生段错误呢? 一方面为了给自己的学习做个总结,另一方面由于至今没有找到一个比较全面介绍这个虽然是“FREQUENTLYASKEDQUESTIONS”的问题,所以我来做个抛砖引玉吧。下面就从上面的几个问题出发来探讨一下“Segmentationfaults"吧。目录1。什么是
3、段错误?2。为什么段错误这么“麻烦”?3。编程中通常碰到段错误的地方有哪些?4。如何发现程序中的段错误并处理掉?正文1。什么是段错误?下面是来自Answers.com的定义:Asegmentationfault(oftenshortenedtosegfault)isaparticularerrorconditionthatcanoccurduringtheoperationofcomputersoftware.Inshort,asegmentationfaultoccurswhenaprogramattemptstoaccessamemorylocati
4、onthatitisnotallowedtoaccess,orattemptstoaccessamemorylocationinawaythatisnotallowed(e.g.,attemptstowritetoaread-onlylocation,ortooverwritepartoftheoperatingsystem).SystemsbasedonprocessorsliketheMotorola68000tendtorefertotheseeventsasAddressorBuserrors.Segmentationisoneapproacht
5、omemorymanagementandprotectionintheoperatingsystem.Ithasbeensupersededbypagingformostpurposes,butmuchoftheterminologyofsegmentationisstillused,"segmentationfault"beinganexample.Someoperatingsystemsstillhavesegmentationatsomelogicallevelalthoughpagingisusedasthemainmemorymanagemen
6、tpolicy.OnUnix-likeoperatingsystems,aprocessthataccessesinvalidmemoryreceivestheSIGSEGVsignal.OnMicrosoftWindows,aprocessthataccessesinvalidmemoryreceivestheSTATUS_ACCESS_VIOLATIONexception.另外,这里有个基本上对照的中文解释,来自http://www.linux999.org/html_sql/3/132559.htm所谓的段错误就是指访问的内存超出了系统所给这个程序
7、的内存空间,通常这个值是由gdtr来保存的,他是一个48位的寄存器,其中的32位是保存由它指向的gdt表,后13位保存相应于gdt的下标,最后3位包括了程序是否在内存中以及程序的在cpu中的运行级别,指向的gdt是由以64位为一个单位的表,在这张表中就保存着程序运行的代码段以及数据段的起始地址以及与此相应的段限和页面交换还有程序运行级别还有内存粒度等等的信息。一旦一个程序发生了越界访问,cpu就会产生相应的异常保护,于是segmentationfault就出现了通过上面的解释,段错误应该就是访问了不可访问的内存,这个内存区要么是不存在的,要么是受到系统保
8、护的。2。为什么段错误这么麻烦?中国linux论坛有一篇精华帖子《Segment
此文档下载收益归作者所有