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

soc*_*cks 1 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;
}
Run Code Online (Sandbox Code Playgroud)

这段代码有什么问题?

Mud*_*Mud 10

struct node *root;
root->x = 42;
Run Code Online (Sandbox Code Playgroud)

您正在取消引用未初始化的指针.要为节点分配存储:

struct node *root = malloc(sizeof(struct node));
Run Code Online (Sandbox Code Playgroud)

您还可以在堆栈上分配节点:

struct node root;
root.x = 42;
Run Code Online (Sandbox Code Playgroud)