“段错误 (核心已转储) ”一种可能原因及其解决方法

本文介绍了在Linux系统中遇到的段错误(Segmentation fault)问题及其解决方案。通过调整栈空间大小,成功解决了由大数组引起的段错误,并提到了使用vector容器作为可能的替代方案。

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


终端在运行的时候总是出现

“段错误 (核心已转储) ”


栈空间用来存储数组等数据,那么段错误就应该是我存储的数组超过了它所在段的大小,于是在的程序执行的过程中一到跟大数组相关的步骤就会出现段错误的提示(SIGSEGV: Segmentation fault)。

     linux下应用  ulimit -a 命令查看当前栈空间大小,得到:

     8012  

     即我的系统下栈空间应该为8M,而可以自己算下自己定义的数组大小,发现我的数组每个大概3M多,而我的数组个数也大于3个,我的gdb中调试的过程中也恰巧是在第三个大维数数组那出现的问题,我的数组的确越过了stack段的边界,出现了错误。

▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂


     如何解决这个问题呢?

     我用

ulimit -s  102400

     将栈的大小改为100M(这回可够用了),然后运行程序或者debug,程序就能正确运行了。

    我在其他人的帖子里看见一些人说用vector容器可能会更好,自己还没有去深入学习,这是我下一步个工作吧,今天先把怎么解决这个问题的过程帖子这里。希望可以和大家交流下关于段错误的问题。

评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值