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


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

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


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

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

     8012  

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

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


     如何解决这个问题呢?

     我用

ulimit -s  102400

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

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

你可能感兴趣的:(linux基础)