本文主要是介绍linux C 栈空间不足导致段错误,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
问题阐述:正常运行很久的函数,将两个宏定义由1024改为2048。宏定义用于申请char数组,按理说改大char数组程序各方面都不会出错,然而程序却段错误了,同时没有出core。
原因解释:1)程序中有两个这样的char数组,算下来,一个char是一个字节,两个2048*2048的数组便是8MB的空间。
2)而使用ulimit -a查看linux系统中设置的栈空间大小stack size,8192(单位KB),即8MB,,也可用ulimit -s可以只看栈空间大小。可见栈空间已经不够用了,在调用该函数的时候,在栈空间中为该函数开辟空间,因为已经开辟不出这么大的空间了,于是段错误了,程序目前尚未进入该函数,因为在装载该函数的时候挂掉了。所以即使给该函数第一行加输出信息,也输出不了。
3)使用ulimit -s 10240修改栈大小为10M,重新运行程序&#
这篇关于linux C 栈空间不足导致段错误的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!