Segmentation fault (core dumped) --段错误

      有些时候我们在一段 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行。


“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:编程工作室 设计师:CSDN官方博客 返回首页
评论

打赏作者

随心记IT

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值