Segmentation fault (core dumped) --段错误

本文介绍了在C/C++编程中遇到的“Segmentation fault(coredumped)”问题及其解决方法。文章列举了几种常见的引起段错误的原因,并提供了两种实用的定位方法:使用printf()函数和gdb调试工具。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      有些时候我们在一段 C/C++ 代码的时候,由于对一个非法内存进行了操作,在程序运行的过程中,出现了“Segmentation fault (core dumped)”——段错误。

    段错误就是指访问的内存超出了系统所给这个程序的内存空间。

       在编程中以下几类做法容易导致段错误,基本上是错误地使用指针引起的。

1) 访问系统数据区,尤其是往系统保护的内存地址写数据,最常见就是给一个指针以0地址。

2) 内存越界( 数组越界,变量类型不一致等):访问到不属于你的内存区域。

    解决方法

在程序中找出段错误的地方常用的两种方法:

1、通过在程序中使用printf()函数来定位;

2、使用gdb调试来定位问题所在;

接下来,给大家介绍通过gdb快速定位“段错误”的位置

1)首先,要确保安装了gdb调试工具,在终端可通过“which gdb”查看:

2)编译C/C++代码,加上 -g 参数,代表在可执行文件中加入标准调试信息。

       

     3)接着通过"./"运行可执行程序,如果出现“段错误”,正常情况下会在程序同级目录下生成一个core文件。有些环境却不会生成core文件(如Ubuntu)core文件仅仅是一个内存映像(同时加上调试信息),主要用来调试的


在ubuntu14.04环境下测试:

C测试代码如下:

#include <stdio.h>

int main(int argc,char** argv)  
{  
int *i = NULL;
    *i = 250;
return 0;
}

1)ubuntu系统在出现段错误不会在当前目录下生成core文件,但是可以在执行程序前执行如下命令即可:

ulimit -c unlimited

2)现在运行可执行文件就可以生成core文件,core 文件生成的位置一般于运行程序的路径相同。


3)用gdb来调试core文件:gdb 1 core,快速定位“段错误”的位置。


4)在gdb字符界面中敲“where”查看更详细信息,可查看到段错误出现在main函数的第6行。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值