Как установить все дети в NULL в три

Я пытаюсь реализовать trie в C. Мой код компилируется правильно, но когда я запускаю его с помощью valgrind, он показывает ошибку. вот проблемная часть:

typedef struct node {
bool end;
struct node *chil[26];
} NODE;
int main()
{
   NODE* ne = (NODE*)malloc(sizeof(NODE)); 
   if(ne->chil[1] == NULL) printf("\nzwycięstwo!\n"); 
   free(ne);
   return 0;
}

и вот сообщение об ошибке:

== 3346 == Условный переход или перемещение зависит от неинициализированных значений

== 3346 == в 0x40076B: основной (exp.c: 21)

== 3346 == Неинициализированное значение было создано выделением кучи

== 3346 == в 0x4C2AB80: malloc (в /usr/lib/valgrind/vgpreload_memcheck-amd64->linux.so)

== 3346 == по 0x40075A: основной (exp.c:20)`

Я думаю, я должен прямо сказать, что

ne->chill = {NULL};

но это приводит к ошибке компилятора "ожидаемое выражение"

Что я должен делать? Можно ли обойти весь массив, чтобы установить указатели на NULL?

1 ответ

Решение

Цикл - это единственный способ установить все указатели на значение NULL.

for (int i = 0; i < 26; ++i)
  ne->chil[i] = NULL;

Вы можете услышать предложения по использованию calloc или же memset, Но нулевой битовый шаблон не обязательно совпадает со значением NULL для указателя. Даже если многие платформы реализуют это таким образом.

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