我是编程新手,想知道为什么在堆栈上声明字符数组而不是在堆上声明字符数组时会出现分段错误。我查阅了有关堆栈与堆分配的文章,但不知道为什么这会失败。
下面给出了内存集上的分割错误
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。我猜想大的内存分配可能是可能的堆栈碎片导致的原因?
答案 0 :(得分:1)
您是否正在一个可用堆栈空间小于(2 * 999 + 1)* 9999 = 19,988,001字节的小型平台上运行?或者,也许您的编译器默认使用的堆栈小于该堆栈?例如,此线程说Visual Studio的默认堆栈大小仅为1MB:C/C++ maximum stack size of program。