为什么这个简单的hello world代码是segfaulting?

时间:2010-12-21 22:45:23

标签: c

请原谅这个问题的初学者水平。我有以下简单的代码,但它似乎没有运行。它会出现分段错误。如果我用对实际变量的简单调用替换指针,它运行正常......我不知道为什么。

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;
}

此代码有什么问题?

3 个答案:

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