简体   繁体   中英

Why is this simple hello world code segfaulting?

Excuse the beginner level of this question. I have the following simple code, but it does not seem to run. It gets a segmentation fault. If I replace the pointer with a simple call to the actual variable, it runs fine... I'm not sure why.

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

What is wrong with this code?

struct node *root;
root->x = 42;

You're dereferencing an uninitialized pointer. To allocate storage for the node:

struct node *root = malloc(sizeof(struct node));

You could also allocate a node on the stack:

struct node root;
root.x = 42;

In order to use a pointer to access something, the pointer must be pointing at that something. In order for the pointer to be pointing at that something, that something must exist. Creating a pointer does not create anything for it to point at. You must do so explicitly, either by dynamic allocation ( malloc() ), stack allocation (ie a local variable) or by pointing to something that already exists (eg a static instance, such as a global; a value that was passed in as a parameter; etc.).

After struct node *root; line add the

root = (sturct node*) malloc(sizeof(struct node));

Also, before Return 0 line add the

free(root);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM