无法理解 C 中的尝试

Can't understand tries in C

我开始使用 C 语言进行尝试,我编写了这个非常简单的程序,但不知何故它崩溃了。我不知道为什么,但如果你能看看我的代码并告诉我那会很棒。

#include <stdio.h>
#include <stdlib.h>
#include <cs50.h>
#include <string.h>

typedef struct node
{
    bool is_word;
    struct node* children[27];
}
node;

node* root;

int main()
{
    root->children[0]=NULL;
}

在使用指针之前,您必须对其进行初始化。在此特定示例中,您很可能会得到一个 NULL 指针,因为根据 C 标准,全局变量应初始化为 0。

#include <stdio.h>
#include <stdlib.h>
#include <cs50.h>
#include <string.h>

typedef struct node
{
    bool is_word;
    struct node* children[27];
}
node;

node* root;

int main()
{
    root = malloc(sizeof(node));
    root->children[0]=NULL;
    free(root);
}

问题就出在这里

node *root;

您已声明根但尚未定义。默认情况下,这包含一些垃圾地址或全局 NULL,这是非法访问,因此程序崩溃。

将您的根初始化为 trie 的第一个节点,然后进一步使用它。

正在做这个操作-

root->children[0] = NULL

转换为 someGarbageValue/NULL -> children[0] = NULL // 没有意义。 将您的根初始化为您的第一个节点。

要初始化根目录,您可以为其分配内存。

root = (node *)malloc(sizeof(node));

这将从堆中分配内存,malloc 会将分配的内存的起始地址存储到根节点指针中。

不要忘记释放此内存以避免内存泄漏

free(root)