在分配staticaly一个int数组时的Segfault

Gae*_*ael 4 c malloc

如果我这样做

int wsIdx [length];

我有一个segFault

但如果我这样做

int *wsIdx;
wsIdx = (int *)malloc(sizeof(int) * length );
Run Code Online (Sandbox Code Playgroud)

这里没有问题.

只有在我的测试期间长度很高,2560000时才会出现此问题.我有足够的记忆力.你能解释一下这两种分配方法之间的区别,以及为什么第一种方法不起作用?谢谢.

Lev*_*von 5

第一个在"堆栈"(通常用于局部变量的区域)上分配,而第二个在"堆"上分配一个区域用于动态分配的内存.

您没有足够的堆栈空间以第一种方式分配,您的堆很大.

这个SO讨论可能会有所帮助:堆栈和堆的内容和位置是什么?.

当您动态分配内存时,您可以通过检查malloc/calloc/etc的返回值来检查分配是否成功.不幸的是,在堆栈上分配内存时不存在这样的机制.

旁白:你可能喜欢在这个问题的背景下阅读这个,特别是这部分 :)