我是编程新手,想知道为什么在堆栈上声明字符数组时会出现Segmentation Fault,而在堆上声明时却不会。我查阅了Stack与Heap分配的文章,但不明白为什么会失败。
下面给出了memset 上的分段故障
char space[(2*len + 1) * cnt];
memset(space, 0, (2*len + 1) * cnt);
下面的工作原理很好
char *space = (char *)malloc((2*len + 1) * cnt);
memset(space, 0, (2*len + 1) * cnt);
在我的情况下len=999,cnt=9999。我猜内存分配过大可能是堆栈碎片造成的原因?
您是否在可用堆栈空间小于(2*999+1(*9999=19988001字节的小型平台上运行?或者你的编译器默认使用一个比它小的堆栈?例如,这个线程说VisualStudio的默认堆栈大小只有1MB:C/C++程序的最大堆栈大小。