Инициализация массива внутри структуры - 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;
}

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

2 ответа

Решение

Вам нужно будет снова вызвать 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;
}
bzero(tmp, sizeof(*tmp));

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

Другие вопросы по тегам