我真的不明白为什么我在这里是错误的。这是有史以来最简单的代码。
所以基本上,我有这个简单的节点结构
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);
我遇到了段错误。有什么想法吗?
答案 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);