Я работаю над словарем, структура которого:
typedef union _dict {
union _dict * children[M];
list * words[M];
} dict;
Инициализация:
dict *d = (dict*) malloc(sizeof(dict));
Я пытаюсь сделать следующее:
dict *temp;
temp = d;
temp=temp->children[0];
temp=temp->children[0];
first temp->children[0]
работает, но не второй. Я пытаюсь понять почему. Я думаю, что это проблема выделения памяти.
Редактировать 1:
Я пробовал следующий код:
dict *d = (dict*) malloc(sizeof(dict));
dict *temp;
temp = d;
dict *d2 = (dict*) malloc(sizeof(dict));
temp->children[0] = d2;
temp = temp->children[0];
temp = temp->children[0];
temp = temp->children[0];
Теперь это работает, но я не понимаю, почему ... Я имею в виду, я не позволил памяти для следующих детей.
Редактировать 2:
Итак, теперь я хотел бы использовать это в моем алгоритме. Блок кода, в котором я застрял, следующий:
list *l;
if (temp->words[occur] != NULL) {
/* ... */
}
else {
l = list_new();
temp->words[occur] = (list*) malloc(sizeof(list));
temp->words[occur] = l;
}
list_append(l,w);
list_print(l);
Если я поставлю temp->words[occur] = NULL;
перед этим блоком, слово будет успешно добавлено, но каждый раз при использовании алгоритма создается новый список. Я хотел бы добавить свое слово в ранее созданный список, предполагая, что оно существует.
Инструкция bzero((void*)d, sizeof(dict));
используется после инициализации dict.