无法理解 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)
我开始使用 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)