请原谅这个问题的初学者水平。我有以下简单的代码,但它似乎没有运行。它会出现分段错误。如果我用对实际变量的简单调用替换指针,它运行正常......我不知道为什么。
struct node
{
int x;
struct node *left;
struct node *right;
};
int main()
{
struct node *root;
root->x = 42;
printf("Hello world. %d", root->x);
getchar();
return 0;
}
此代码有什么问题?
答案 0 :(得分:10)
struct node *root;
root->x = 42;
您正在取消引用未初始化的指针。为节点分配存储:
struct node *root = malloc(sizeof(struct node));
您还可以在堆栈上分配节点:
struct node root;
root.x = 42;
答案 1 :(得分:1)
为了使用指针访问某些东西,指针必须指向那个东西。为了使指针指向那个东西,必须存在某些东西。创建指针不会创建指向它的任何内容。您必须通过动态分配(malloc()
),堆栈分配(即局部变量)或指向已存在的内容(例如,static
实例(例如全局)来明确地执行此操作;作为参数传递的值;等等。)
答案 2 :(得分:-1)
在struct node *root;
行之后添加
root = (sturct node*) malloc(sizeof(struct node));
此外,在Return 0
行之前添加
free(root);