我正在尝试在 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;
您可能会听到使用 calloc
或 memset
的建议。但零位模式不一定与指针的 NULL 值相同。即使许多平台以这种方式实现它。