`
ILoveDOUZHOU
  • 浏览: 82435 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

Linux中段错误

 
阅读更多

转自于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段错误.pdf

    通过上述内容,我们可以了解到Linux系统中段错误的相关知识,以及如何使用GDB进行调试、核心转储文件的管理,以及相关的系统安全和程序编译选项等。这些知识对于Linux系统下的软件开发和维护非常重要,可以帮助...

    qt 段错误 解决方案

    针对这些问题,以下是一些解决Qt中段错误的策略: 1. **调试工具**:使用GDB等调试器可以帮助定位段错误发生的具体位置,通过查看堆栈信息找出问题源。 2. **代码审查**:仔细检查代码,确保所有指针都被正确初始化...

    基于C语言中段错误的问题详解

    在Linux操作系统中,这种错误被称为"Segmentation Violation",它是由内存管理单元(Memory Management Unit, MMU)检测到的一种异常。本文将深入探讨导致段错误的原因、如何引发以及如何避免。 首先,段错误的根本...

    Cisco服务器安装,思科服务器安装操作系统方法

    在 IP 设置界面中,将 eth0 设置为 192.168.2.222,掩码为 255.255.255.0,在两次“数据错误”界面均点击“是”,可进入下一设置页面(eth1 将用于与环保专用网络连接,故暂不设置)。 五、管理员密码设置 确定...

    EXT2文件系统

    EXT2文件系统是 Linux 系统中的标准文件系统,由 Minix 文件系统扩展而来,具有高效的存取性能。在 EXT2 文件系统中,文件由 inode 进行唯一标识,每个文件可能对应多个文件名,只有在所有文件名都被删除后,该文件...

Global site tag (gtag.js) - Google Analytics