在编译高翔博士第5讲的PCL程序时,总是提示一个错误。我是以命令行的形式编译的。错误
显示如下:
终端在运行的时候总是出现
“段错误 (核心已转储) ”
栈空间用来存储数组等数据,那么段错误就应该是我存储的数组超过了它所在段的大小,于是在的程序执行的过程中一到跟大数组相关的步骤就会出现段错误的提示(SIGSEGV: Segmentation fault)。
linux下应用 ulimit -a 命令查看当前栈空间大小,得到:
8012
即我的系统下栈空间应该为8M,而可以自己算下自己定义的数组大小,发现我的数组每个大概3M多,而我的数组个数也大于3个,我的gdb中调试的过程中也恰巧是在第三个大维数数组那出现的问题,我的数组的确越过了stack段的边界,出现了错误。
▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂
如何解决这个问题呢?
我用
ulimit -s 102400
将栈的大小改为100M(这回可够用了),然后运行程序或者debug,程序就能正确运行了。