[解决问题]查找产生Segmentation fault (core dumped)错误的真正原因

运行程序时,Segmentation fault (core dumped)问题常见且难定位,可利用core文件查找错误。先对core文件扩容,默认大小为0,可通过命令扩充;若遇权限报错,可修改/etc/security/limits.conf文件解决;最后查找具体问题,如无效内存引用,以便定位解决。

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

在我们运行程序的时候,经常会遇到Segmentation fault (core dumped)的问题,这种问题多见于内存操作不当,比如空指针、野指针的读写操作,数组越界访问,常量被破坏等。对于一个比较大的程序,比较难定位错误具体的位置,因此我们需要利用core文件进行错误的查找。

1、对core文件扩容

我们使用以下的命令查找core的大小信息:

$ ulimit -a

一般来说,core的默认大小都是0,无法保存程序的错误信息,我们用以下的命令进行扩充:

$ ulimit -c 1024
$ ulimit -c unlimited

第一行将core的大小扩展至1024字节,当然我们写一个稍微大一点的程序就不够用了,一般生成的core大小基本等于程序运行中占用的内存大小,因此用第二行的命令更合适。

2、遇到的问题

一般情况上面的命令可以更正core文件的限制大小,然而有时会报如下的错:

-bash: ulimit: core file size: cannot modify limit: Operation not permitted

一般这类问题我们考虑权限的原因,然而这次我们不是通过加sudo解决,我们需要打开/etc/security/limits.conf文件,然后添加如下内容:

你的用户名 hard core unlimited
你的用户名 soft core unlimited

你的用户名是命令行里@前面的那个,保存后执行

$ ulimit -c unlimited

就可以解决问题了。更改前后如图所示,第一行最后表示core的限制大小。

3、查找具体问题

具体问题在倒数第五行,搜一下这个问题发现是无效的内存引用,知道了问题具体是什么就比较容易定位以及解决问题了。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值