攀上富亲戚之:segmentation fault

攀上富亲戚之:segmentation fault

ID:1249798

大小:51.50 KB

页数:7页

时间:2017-11-09

攀上富亲戚之:segmentation fault_第1页
攀上富亲戚之:segmentation fault_第2页
攀上富亲戚之:segmentation fault_第3页
攀上富亲戚之:segmentation fault_第4页
攀上富亲戚之:segmentation fault_第5页
资源描述:

《攀上富亲戚之: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

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。