c - 如何在trie中将所有 child 设置为NULL

标签 c arrays null trie

我试图在 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== Conditional jump or move depends on uninitialised value(s)

==3346== at 0x40076B: main (exp.c:21)

==3346== Uninitialised value was created by a heap allocation

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

==3346== by 0x40075A: main (exp.c:20)`

我想我必须明确地说

ne->chill = {NULL};

但这会导致编译器错误 “预期的表达”

我该怎么办?我可以避免遍历整个数组以将指针设置为 NULL 吗?

最佳答案

循环是将所有指针可移植地设置为 NULL 值的唯一方法

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

您可能会听到使用 callocmemset 的建议。但是零位模式不一定与指针的 N​​ULL 值相同。即使许多平台都是这样实现的。

关于c - 如何在trie中将所有 child 设置为NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41591163/

相关文章:

c - 从宏的内容定义宏

arrays - 如何在 Swift 中打乱数组?

c++ - myProgrammingLab "palindrome"挑战和递归

html - 使用 EL 访问对象属性时进行 null 检查的必要性

c - 标题和多个来源

c - curses C 中的随机数

JavaScript 数组未初始化

sql - 标准 SQL bool 运算符 IS 与等于 (=) 运算符

sql - 如何处理postgresql日期字段中的空值

c - 在 C 中操作结构体 - 输入变量