2010-10-25 6 views
0

Кажется, проблема с распределением памяти и думаю, что это потому, что в моей структуре есть указатель на массив другой структуры. Тем не менее, я не инициализирую этот массив и не знаю как:Инициализация массива внутри структуры - C?

typedef struct listitem { 
    struct listitem *next; 
    Entry *entry; 
} ListItem; 

typedef struct list { 
    ListItem *table[100]; 
} List; 

List *initialize(void) 
{ 
    List *tmp; 

    if ((tmp = (List *)malloc(sizeof(List))) == NULL) 
     return NULL; 
    return tmp; 
} 

Надеюсь, что это имеет смысл, и вы могли бы помочь!

ответ

3

Вам нужно будет снова позвонить в malloc.

typedef struct listitem { 
    struct listitem *next; 
    Entry *entry; 
} ListItem; 

typedef struct list { 
    ListItem *table[100]; 
} List; 

List *initialize(void) 
{ 
    List *tmp; 

    if (!(tmp = (List *)malloc(sizeof(List)))) 
     return NULL; 
    for(int i = 0; i < 100; i++) { 
     tmp->table[i] = (ListItem*)malloc(sizeof(ListItem)); 
    } 
    return tmp; 
} 
+0

Как вы можете просто получить доступ к таблице, но вы не устанавливаете для него указатель в структуре? –

+0

@Igor K: Упс, моя ошибка. Используется для правильных функций-членов. – Puppy

+0

Спасибо @DeadMG, попробовал это, но я все равно получаю ту же ошибку с моей программой, хотя это другой вопрос! –

0
bzero(tmp, sizeof(*tmp)); 

просто обнуляет содержимое списка структуры. Если это то, что вы хотите.

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