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行。


  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux segmentation fault core dumped是一个常见的错误提示,它通常意味着程序在运行时出现了严重的问题,导致操作系统无法继续执行进程并产生了core dump文件。core dump文件是系统在发生异常时自动生成的文件,它包含了发生异常时的内存状态,可以帮助开发者进行问题排查和调试。 Segmentation fault通常是由于程序访问了不属于它的内存区域所导致的。这可能是由于程序中的指针错误、数组越界访问、非法内存访问等原因引起的。当程序发生segmentation fault时,操作系统会将进程的状态保存到一个core dump文件中,以便后续进行调试和分析。 要查看core dump文件,可以使用以下命令: ```shell $ gdb <program_name> <core_dump_file> ``` 其中,`<program_name>`是发生segmentation fault的程序名称,`<core_dump_file>`是生成的core dump文件的路径。使用gdb工具可以打开core dump文件并进行调试,以找出导致segmentation fault的具体原因。 要解决segmentation fault问题,可以采取以下步骤: 1. 检查程序中的指针和内存访问是否正确,避免越界访问和非法内存访问。 2. 检查程序是否使用了动态分配的内存,并确保在使用完毕后释放了所有分配的内存。 3. 调试程序,使用gdb工具打开core dump文件并逐步执行程序,查看在发生segmentation fault时的内存状态,找出问题所在。 4. 如果问题仍然无法解决,可以尝试使用其他工具或方法进行调试和分析,例如使用valgrind等内存检测工具。 总之,Linux segmentation fault core dumped是一个常见的错误提示,它通常是由于程序访问了不属于它的内存区域所导致的。通过查看core dump文件并进行调试和分析,可以找出导致segmentation fault的具体原因并加以解决。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值