[英]Segfault while allocating staticaly an int array
如果我這樣做
int wsIdx [length];
我有一個segFault
但如果我這樣做
int *wsIdx;
wsIdx = (int *)malloc(sizeof(int) * length );
這里沒有問題。
只有在我的測試期間長度很高,2560000時才會出現此問題。 我有足夠的記憶力。 你能解釋一下這兩種分配方法之間的區別,以及為什么第一種方法不起作用? 謝謝。
假設length
不是常數,那么第一種形式是可變長度數組 (VLA),您剛剛遇到了它們最大的問題之一。
最佳做法是避免使用“大型”數組的VLA,並使用malloc
,原因有兩個:
除了崩潰或導致其他一些未定義的行為之外,沒有任何機制可以報告分配失敗。
通常在堆棧上分配VLA,其通常在尺寸上相對有限。 所以它未能分配的可能性要高得多!
隱含的auto
被認為有害
為了同意已經給出的答案,如果錯誤代碼是使用顯式存儲類編寫的,則這個常見問題可能更為明顯。
void
not_enough_stack(void)
{
auto int on_stack[2560 * 1000];
printf("sizeof(stack) %d\n", sizeof(on_stack));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.