2016-07-06 123 views
0
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

#define  MAXNO 1000 

typedef struct 
{ 
    int  n; 
    char site[4]; 
} stru; 

typedef struct 
{ 
    stru t1[MAXNO]; 
    stru t2[MAXNO]; 
} struall; 

int main() 
{ 
    struall tmp; 
    int i; 
    printf("%d\n",i); 
    return 1; 
} 

嗨,大家好,我試圖聲明一個結構變量,其中有兩個結構數組成員。如果數組大小(MAXNO)很小,我可以成功編譯。但是,如果數組大小很大(將MAXNO定義爲1000000),則聲明將失敗並顯示分段錯誤。如何聲明內部有大型結構數組的結構

有誰能告訴我理由?

非常感謝!

+0

閱讀關於[棧和堆]一點點(http://stackoverflow.com/questions/79923/what-並且在那裏是堆棧和堆) – Logman

+1

'C'和'C++'是不同的語言。明智地標記。 – sjsam

+0

@sjsam你說的對,但是這個問題的原因在兩種語言中都是一樣的。 – Logman

回答

2

您只能將「哦,那麼多」放在機器堆棧上。嘗試:用C

struall* tmp = malloc(sizeof(struall)); 

或C++下列之一:

struall* tmp = new struall; // C++03 
std::unique_ptr<struall> tmp{new struall}; // C++11 
auto tmp = std::make_unique<struall>(); // C++14 
+0

不錯和完整:-)關於每種方法的一些解釋將給你一個粉絲羣,我猜這個.. ..但是.. .. .. – sjsam