2013-03-20 2 views
0

При необходимости создания хэш-таблицы мне нужно создать массив больших структур с по меньшей мере 1 000 000 элементов.Невозможно создать большой массив struct в C

#include <stdio.h> 

#define N 1000003 

struct hashTable 
{ 
    char productID[16]; 
    double points; 
}; 

int main(int argc, char const *argv[]) 
{ 
    struct hashTable table[N] = {0};   // Stack Overflow happens here 

    return 0; 
} 

Проблема в том, что я получаю переполнение стека всякий раз, когда пытаюсь создать такой массив.

Есть ли способ преодолеть это? Есть ли другой способ создания такого большого массива?

+2

По крайней мере, этот вопрос идеально подходит для сайта .. –

ответ

1
hashTable *table = malloc(N*sizeof(hashTable)); //allocate memory 
... use it 
free(table); //free memory 
+1

Выполнение результата malloc бессмысленно и потенциально опасно. Прочтите все [C faq] (http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc). – Lundin

+0

thx, исправлено это;) Я привык к C++ – brano

1

Это слишком велико, чтобы выделять этот путь (в стеке в большинстве реализаций). Стандарт не гарантирует выделение больших объектов таким образом. Используйте malloc(), чтобы распределить его динамически.

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