Как установить все дети в 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 для указателя. Даже если многие платформы реализуют это таким образом.