2016-09-24 54 views
-1

,比如我有以下2層結構在C:無法實現與2-d陣列結構中在C

typedef struct { 
    int index[128][128]; 
    int value; 
} x; 

typedef struct { 
    x allx[128]; 
} y; 

,並在主函數我試圖使用它們:

int main(int argc, char *argv[]) { 

    x x1 = {{{1,2},{3,4}}, 1}; 
    x x2 = {{{2,4},{1,5}}, 0}; 
    x x3 = {{{3,6},{1,7}}, 1}; 

    y y1 = {{x1,x2,x3}}; 

    printf("%s\n", "Test"); 
} 

但是,在我編譯並運行它後,沒有任何反應。 printf將測試程序工作是否可以運行。但它什麼都不做,從不打印「測試」。在編譯期間,不會發生錯誤。我不知道它是否是struct x中的2-d數組的問題。任何人都可以幫忙

+0

嘗試在調試器中運行,看看會發生什麼。 –

+0

假設一個32位'int',你爲三個'x'實例(每個64k)請求粗略的196608字節,並且爲'y'實例添加了8388608個字節。總共約8.1875 ** MB **的自動存儲。如果你的運行時設置不能很好地運行,你的程序本質上就會嘔吐。 – WhozCraig

回答

2

這可能是堆棧溢出。堆棧中的單個y是128 * 128 * 4 * 128,這是8兆字節。在Windows上,默認堆棧是1兆(或過去是),而linux就像8兆我認爲。

當我縮y以

typedef struct { 
    x allx[8]; 
} y; 

,或使變量靜態的,它運行良好的Xcode的。

+0

謝謝!這就是原因。它確實有幫助。 –