欢迎来到天天文库
浏览记录
ID:26569817
大小:101.00 KB
页数:18页
时间:2018-11-27
《c语言段错误小结》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、C段错误总结C语言2009-02-1711:49:51阅读21评论0 字号:大中小 订阅最近一段时间在linux下用C做一些学习和开发,但是由于经验不足,问题多多。而段错误就是让我非常头痛的一个问题。不过,目前写几百行的代码,也很少出现段错误,或者是即使出现了,也很容易找出来,并且处理掉。 那什么是段错误?段错误为什么是个麻烦事?以及怎么发现程序中的段错误以及如何避免发生段错误呢? 一方面为了给自己的学习做个总结,另一方面由于至今没有找到一个比较全面介绍这个虽然是“FREQUENTLYASKEDQU
2、ESTIONS”的问题,所以我来做个抛砖引玉吧。下面就从上面的几个问题出发来探讨一下“Segmentationfaults"吧。目录1。什么是段错误?2。为什么段错误这么“麻烦”?3。编程中通常碰到段错误的地方有哪些?4。如何发现程序中的段错误并处理掉?正文1。什么是段错误?下面是来自Answers.com的定义:Asegmentationfault(oftenshortenedtosegfault)isaparticularerrorconditionthatcanoccurduringtheoperati
3、onofcomputersoftware.Inshort,asegmentationfaultoccurswhenaprogramattemptstoaccessamemorylocationthatitisnotallowedtoaccess,orattemptstoaccessamemorylocationinawaythatisnotallowed(e.g.,attemptstowritetoaread-onlylocation,ortooverwritepartoftheoperatingsystem
4、).SystemsbasedonprocessorsliketheMotorola68000tendtorefertotheseeventsasAddressorBuserrors.Segmentationisoneapproachtomemorymanagementandprotectionintheoperatingsystem.Ithasbeensupersededbypagingformostpurposes,butmuchoftheterminologyofsegmentationisstillus
5、ed,"segmentationfault"beinganexample.Someoperatingsystemsstillhavesegmentationatsomelogicallevelalthoughpagingisusedasthemainmemorymanagementpolicy.OnUnix-likeoperatingsystems,aprocessthataccessesinvalidmemoryreceivestheSIGSEGVsignal.OnMicrosoftWindows,apro
6、cessthataccessesinvalidmemoryreceivestheSTATUS_ACCESS_VIOLATIONexception.另外,这里有个基本上对照的中文解释,来自http://www.linux999.org/html_sql/3/132559.htm所谓的段错误就是指访问的内存超出了系统所给这个程序的内存空间,通常这个值是由gdtr来保存的,他是一个48位的寄存器,其中的32位是保存由它指向的gdt表,后13位保存相应于gdt的下标,最后3位包括了程序是否在内存中以及程序的在cpu中
7、的运行级别,指向的gdt是由以64位为一个单位的表,在这张表中就保存着程序运行的代码段以及数据段的起始地址以及与此相应的段限和页面交换还有程序运行级别还有内存粒度等等的信息。一旦一个程序发生了越界访问,cpu就会产生相应的异常保护,于是segmentationfault就出现了通过上面的解释,段错误应该就是访问了不可访问的内存,这个内存区要么是不存在的,要么是受到系统保护的。2。为什么段错误这么麻烦?中国linux论坛有一篇精华帖子《Segmentfault之永远的痛》(http://www.linuxfor
8、um.net/forum/gshowflat.php?Cat=&Board=program&Number=193239&page=2&view=collapsed&sb=5&o=all&fpart=1&vc=1)在主题帖子里头,作者这么写道:写程序好多年了,Segmentfault是许多C程序员头疼的提示。指针是好东西,但是随着指针的使用却诞生了这个同样威力巨大的恶魔。Segmentfault之所以
此文档下载收益归作者所有