vc2005设置堆栈握族帆大小的方法:
project->property->configuration properties->linker->system下的stack reserve size 和 heap reserve size设置。有上限。
1)程序中有两个这样的char数组,算下来,一个char是一个字节,两个2048*2048的数组便是8MB的空间。2)而使用ulimit -a查看Linux系统中困脊设置的栈汪逗渗空间大小stack size,8192(单位KB),即8MB,,也可用ulimit -s可以只看栈空间大小。可见栈空间已经不够用了,在调用该函数的时候,在栈空间中为该函数开辟空间,因为已经开辟不出这么大的空间了,于是段错误了,程序目前尚未进入该函数,因为在装载该函数的时候挂掉了。所以即使给该函数第一行加输出信息,也输出不了。
3)使用ulimit -s 10240修改栈大小为10M,重新运行程序,程序正常运行无段错误
4)由此可证,的确是系统栈空间大小太小导致程序段错误,当然如果改成new malloc等方式在堆区申请空指丛间则不会段错误。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)