2016-07-06 1 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- and-where-are-the-stack-and-heap) – Logman

+1

'C' и' C++ 'являются отдельными языками. Тэг разумно. – sjsam

+0

@sjsam Вы правы, но причина для этой проблемы одинакова на обоих языках. – Logman

ответ

2

Вы можете поместить только столько, сколько хотите, на стеке машины. Попробуйте:

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

в C или одно из следующих действий для 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

Смежные вопросы