C语言 如何在 trie 中将所有子项设置为 NULL



我正在尝试在 C 中实现一个 trie。我的代码编译正确,但是当我使用 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 指针吗?

循环

是将所有指针可移植到NULL 值的唯一方法

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

您可能会听到使用 callocmemset 的建议。但零位模式不一定与指针的 NULL 值相同。即使许多平台以这种方式实现它。

相关内容

  • 没有找到相关文章

最新更新