创建树时出现分段错误(C)

时间:2018-09-26 03:24:35

标签: c

我真的不明白为什么我在这里是错误的。这是有史以来最简单的代码。

所以基本上,我有这个简单的节点结构

struct node {
    int value;
    struct node *left_child;
    struct node *right_child;
};

当我像这样测试该节点结构时:

struct node *m_node;
m_node->value = 10;
printf("%d\n", m_node->value);

这里一切都很好。

现在,有了这个简单的树结构,事情就开始崩溃了。

struct tree {
    int size;
    struct node *head;
};

我尝试像这样测试它:

struct tree *m_tree;
m_tree->head = m_node;
printf("%d\n", m_tree->head->value);

我遇到了段错误。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您已经创建了一个悬空指针。 malloc()一个空格,或将其分配给已创建的结构的地址:

struct tree *m_tree=malloc(sizeof(struct tree)); // Either this
struct tree *m_tree=&some_node;                  // Or this

答案 1 :(得分:0)

当取消引用没有有效指针值的指针时,将产生未定义的行为。有效指针值是由诸如malloc()之类的内存分配函数返回的值,以及通过使用地址运算符&获得的其他对象的地址。

#include <stdlib.h>  // malloc()

// ...

struct node *m_node = malloc(sizeof(*m_node));
m_node->value = 10;
printf("%d\n", m_node->value);

struct tree *m_tree = malloc(sizeof(*m_tree));
m_tree->head = m_node;
printf("%d\n", m_tree->head->value);