字符数组的堆栈分配会导致分段错误,而堆分配则不会



我是编程新手,想知道为什么在堆栈上声明字符数组时会出现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++程序的最大堆栈大小。

相关内容

  • 没有找到相关文章