我开始使用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;
}
答案 0 :(得分:2)
在使用指针之前,您必须初始化它。在这个特定的例子中,您很可能会得到一个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);
}
答案 1 :(得分:1)
问题出在这里。
node *root;
您已声明root,但尚未定义它。默认情况下,它包含一些垃圾地址或全局为NULL,这对于访问是非法的,因此程序崩溃。
将root初始化为trie的第一个节点,然后再使用它。
执行此操作 -
root->children[0] = NULL
转换为someGarbageValue / NULL - &gt; children [0] = NULL //毫无意义。 将根初始化为第一个节点。
对于初始化根,您可以为其分配内存。
root = (node *)malloc(sizeof(node));
这将从堆中分配内存,malloc会将分配的内存的起始地址存储到根节点指针中。
完成后,不要忘记释放此内存以避免内存泄漏。
free(root)