无法理解C

时间:2016-08-27 20:13:51

标签: c debugging pointers trie cs50

我开始使用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;
}

2 个答案:

答案 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)