segmentation fault in linux

segmentation fault in linux

ID:9214990

大小:309.26 KB

页数:20页

时间:2018-04-23

segmentation fault in linux_第1页
segmentation fault in linux_第2页
segmentation fault in linux_第3页
segmentation fault in linux_第4页
segmentation fault in linux_第5页
资源描述:

《segmentation fault in linux》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、SegmentationFaultinLinuxSegmentationFaultinLinux——原因与避免Author:ZX_WING(xing5820@163.com)1SegmentationFaultinLinux写在前面的话最近CU(chinaunix)出现了很多问segmentationfault的帖子,其实这也是个“月经贴”了,泡CU几年,每个月都有人问。为了减少重复回帖,笔者结合自己的经验,总结了SIGSEGV在Linux中产生的机理,并用实际例子概括哪些编程错误容易引发SIGSEGV。由于本人经验有限,文中难

2、免有疏漏和错误,请发现的朋友发信到xing5820@163.com指正,笔者好即使修改。(版权声明:本文欢迎转载,但未经允许不得用于商业目的)2SegmentationFaultinLinux内容提要本文简单介绍了Segmentationfault发生的原因,结合实际例子描述了内核向用户态程序发送SIGSEGV信号的流程。文中以实例回答了常见的一些SIGSEGV问题,例如“为什么函数返回了栈还可以访问?”、“为什么free()后的内存仍然可以使用”、“为什么我遇到的是SIGSEGV而不是SIGILL信号”等。最后笔者结合自己的经

3、验,列举了一些预防SIGSEGV的编程习惯,供大家参考。SIGSEGV严格依赖操作系统、编译器、硬件平台,本文基于Linux、GCC、32bitIA32架构,但对其他平台操作系统也有借鉴意义。3SegmentationFaultinLinuxRevisionHistory日期版本描述2009.12.211.0初次发表版本4SegmentationFaultinLinux1.什么是“SegmentationfaultinLinux”?我们引用wiki上的一段话来回答这个问题。Asegmentationfault(oftenshor

4、tenedtoSIGSEGV)isaparticularerrorconditionthatcanoccurduringtheoperationofcomputersoftware.Asegmentationfaultoccurswhenaprogramattemptstoaccessamemorylocationthatitisnotallowedtoaccess,orattemptstoaccessamemorylocationinawaythatisnotallowed(forexample,attemptingtowri

5、tetoaread-onlylocation,ortooverwritepartoftheoperatingsystem).Segmentationisoneapproachtomemorymanagementandprotectionintheoperatingsystem.Ithasbeensupersededbypagingformostpurposes,butmuchoftheterminologyofsegmentationisstillused,"segmentationfault"beinganexample.So

6、meoperatingsystemsstillhavesegmentationatsomelogicallevelalthoughpagingisusedasthemainmemorymanagementpolicy.OnUnix-likeoperatingsystems,aprocessthataccessesaninvalidmemoryaddressreceivestheSIGSEGVsignal.OnMicrosoftWindows,aprocessthataccessesinvalidmemoryreceivesthe

7、STATUS_ACCESS_VIOLATIONexception.上述文字没有给出SIGSEGV的定义,仅仅说它是“计算机软件操作过程中的一种错误情况”。文字描述了SIGSEGV在何时发生,即“当程序试图访问不被允许访问的内存区域(比如,尝试写一块属于操作系统的内存),或以错误的类型访问内存区域(比如,尝试写一块只读内存)。这个描述是准确的。为了加深理解,我们再更加详细的概括一下SIGSEGV。�SIGSEGV是在访问内存时发生的错误,它属于内存管理的范畴�SIGSEGV是一个用户态的概念,是操作系统在用户态程序错误访问内存时所

8、做出的处理。�当用户态程序访问(访问表示读、写或执行)不允许访问的内存时,产生SIGSEGV。�当用户态程序以错误的方式访问允许访问的内存时,产生SIGSEGV。从用户态程序开发的角度,我们并不需要理解操作系统复杂的内存管理机制,这是和硬件平台相关的。但是,了解

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

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

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