2011-07-10 82 views
5

當我編譯這個簡單的C代碼時,它很好,但是在取消註釋該行後,它顯示了分段錯誤。我不知道這有什麼問題。請幫忙。在堆棧上分配大數組時分段錯誤

#include<stdio.h> 
int main() 
    { 
    int arr[10002][10002]; 
    int color[10002]; 
    int neigh; 
// scanf("%d",&neigh); 
    return 0; 
    } 
+12

它看起來像你可能有... *鼓卷* ... a **堆棧溢出**! * rimshot * –

+0

你輸入了哪個號碼? – dynamic

+0

我認爲是一個問題,爲數組int arr的許多元素分配內存。你已經達到了極限。顯然它也取決於您使用的操作系統。閱讀此鏈接:http://bytes.com/topic/c/answers/131385-maximum-size-array –

回答

12

你吹堆棧arrcolor。假設你的電話scanf被註釋掉了,編譯器會優化掉所有這些變量,但當它出現時,它會嘗試在堆棧上分配內存。

使變量成爲全局變量,並在堆棧內存和堆內存中進行讀取。

#include<stdio.h> 

int arr[10002][10002]; 
int color[10002]; 

int main() 
{ 
    int neigh; 
    scanf("%d",&neigh); 
    return 0; 
} 
5

函數內分配的變量放在堆棧上,堆棧的大小有限。您可以使用malloc將它們分配到(較大)堆上。

+1

夥計,這是C ... –

+0

哎呀! '...通過使用「malloc」。'' –