`
huangqinqin
  • 浏览: 365838 次
  • 性别: Icon_minigender_2
  • 来自: 福州
社区版块
存档分类
最新评论

段错误

 
阅读更多
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参数。
分享到:
评论

相关推荐

    qt 段错误 解决方案

    在编程领域,"段错误"(Segmentation Fault)是一个常见的运行时错误,通常发生在尝试访问内存空间时,程序试图访问的区域不在其被允许的内存段内。这可能包括访问未初始化的指针、越界数组访问、非法内存释放等。在...

    段错误解决方法

    在IT领域,段错误是一种常见的运行时错误,通常与内存管理有关。段错误(Segmentation Fault)发生在程序试图访问其不被允许访问的内存区域时,例如读取或写入受保护的内存空间,或者尝试执行非代码数据作为指令。在...

    Linux C段错误定位

    在Linux系统中,C语言编程时可能会遇到段错误(Segmentation Fault),这通常是由于非法内存访问、空指针解引用或栈溢出等错误引起的。为了解决这类问题,开发者需要能够有效地定位错误发生的点,以便修复代码。本文...

    Linux下的段错误产生的原因及调试方法

    ### Linux下的段错误产生的原因及调试方法 #### 概述 段错误,即`Segmentation fault`,是在程序运行过程中由于非法访问内存所引发的一种错误。这种错误在Linux环境下非常常见,尤其对于使用C/C++这类需要手动管理...

    Linux环境下段错误的产生原因及调试方法小结

    最近在Linux环境下做C语言项目,由于是在一个原有项目基础之上进行二次开发,而且项目工程庞大复杂,出现了不少问题,其中遇到最多、花费时间最长的问题就是著名的“段错误”(Segmentation Fault)。借此机会系统...

    C_C++中的段错误(Segmentation fault)[转] - 温柔的暴力 - 博客园1

    【C/C++中的段错误(Segmentation fault)】 在计算机编程中,特别是在使用C或C++这类低级语言时,段错误(Segmentation fault)是一个常见的运行时错误,它发生在程序试图访问其不应该访问的内存区域时。这些区域...

    段错误的调试

    ### 段错误的调试详解 #### 一、段错误概念与原理 段错误(Segmentation Fault)是一种常见的编程错误,通常发生在程序试图访问非法内存地址时。这种错误的根源在于程序试图访问或修改未分配给该程序使用的内存...

    段错误的定义及常用的调试方法

    ### 段错误的定义及常用的调试方法 在计算机编程领域,**段错误**(Segmentation fault)是一种常见的运行时错误,通常由程序试图访问它无权访问的内存区域所引发。这种错误在多种编程语言中都可能出现,尤其是在C...

    C语言段错误详解

    "段错误"是C语言中常见的一个严重错误,通常由非法内存访问引起,这可能是由于内存越界、空指针解引用或者数据类型不匹配等问题导致的。本文将深入探讨C语言中的段错误及其分析方法。 首先,我们来理解什么是“段...

    死锁与段错误解读分析

    在Linux环境下,程序员在进行多线程或并发编程时经常会遇到死锁和段错误两种不同的问题,它们分别有着各自的概念、成因以及解决方法。 首先,死锁是指两个或两个以上的进程或线程在资源分配过程中,由于竞争资源而...

    Linux下的段错误Segmentationfault产生的原因及调试方法经典.pdf

    "Linux下的段错误Segmentationfault产生的原因及调试方法经典" 在 Linux 系统中,段错误(Segmentation fault)是一种常见的错误,它是指访问了错误的内存段,或者访问了没有权限的内存区域,或者根本不存在对应的...

    linux中利用tacktrace信息解决段错误

    linux中利用tacktrace信息解决段错误

    段错误(linux)

    ### 段错误(Linux) #### 知识点解析 **段错误**是程序在运行过程中发生的一种常见异常,通常表现为程序突然崩溃并提示“Segmentation fault”或简称为“Segfault”。这种错误多发生在访问非法内存地址时,例如...

    Linux pthread相关函数用法说明(包括发生段错误的原因以及对策等)

    根据给定文件的信息,本文将深入探讨Linux下pthread库中几个关键函数的使用方法,并针对“段错误”这一常见问题进行分析与对策建议。 ### 1. pthread_create #### 函数原型 ```c int pthread_create(pthread_t *...

    linux c段错误处理

    ### Linux C段错误处理 #### 1. 什么是“Segmentation fault in Linux”? 段错误(Segmentation fault),通常简称为SIGSEGV,是计算机软件运行过程中的一种特定错误条件。当一个程序尝试访问其无权访问的内存...

    linux下段错误检查sigsegv

    在Linux操作系统中,"段错误"(Segmentation Fault)是一种常见的程序运行时错误,它通常表示程序试图访问其不应该访问的内存区域。本教程将详细解释如何在Linux环境下检查和定位段错误,以及如何利用提供的`sigsegv...

    Linux下发生段错误时如何产生core文件

    在Linux操作系统中,当一个进程由于各种原因,如非法内存访问、除以零等,触发了段错误(Segmentation Fault)时,系统可以生成一种名为core dump的文件,记录程序崩溃时的内存状态和调用堆栈信息。这对于调试和诊断...

    段错误总结

    段错误总结 _segmentation fault_ 是一种常见的程序错误,在 Linux 中尤为常见。今天,我们将详细总结段错误的概念、原因、避免方法等方面的知识点。 什么是段错误? 段错误(Segmentation Fault)是一种计算机...

    C语言段错误 总结 段错误整理

    C语言段错误总结 C语言中的段错误是指访问了不可访问的内存,这个内存区要么是不存在的,要么是受到系统保护的。段错误是一个非常麻烦的问题,因为它可能导致程序崩溃或出现不可预料的结果。 一、什么是段错误? ...

Global site tag (gtag.js) - Google Analytics