Gae*_*ael 4 c malloc
如果我这样做
int wsIdx [length];
我有一个segFault
但如果我这样做
int *wsIdx; wsIdx = (int *)malloc(sizeof(int) * length );
这里没有问题.
只有在我的测试期间长度很高,2560000时才会出现此问题.我有足够的记忆力.你能解释一下这两种分配方法之间的区别,以及为什么第一种方法不起作用?谢谢.
Lev*_*von 5
第一个在"堆栈"(通常用于局部变量的区域)上分配,而第二个在"堆"上分配一个区域用于动态分配的内存.
您没有足够的堆栈空间以第一种方式分配,您的堆很大.
这个SO讨论可能会有所帮助:堆栈和堆的内容和位置是什么?.
当您动态分配内存时,您可以通过检查malloc/calloc/etc的返回值来检查分配是否成功.不幸的是,在堆栈上分配内存时不存在这样的机制.
旁白:你可能喜欢在这个问题的背景下阅读这个,特别是这部分 :)
归档时间:
13 年,6 月 前
查看次数:
129 次
最近记录: