将新节点分配给树节点时程序崩溃

program crashing while assigning a new node to tree node

我已经为树写了一个c程序。

#include<stdio.h>
#include<stdlib.h>

struct node{
    int data;
    struct node *left;
    struct node *right;
 };

 struct node* newNode(int value){
    struct node* temp;
    temp->left = NULL;
    temp->right = NULL;
    temp->data = value;

    return temp;
 }

 int main(){
    struct node *root;
    root = newNode(60);
    root->left = newNode(40);
    root->right = newNode(80);
    root->left->left = newNode(30); // program crashes here. 
    root->left->right = newNode(50);

 }

这是我正在编写的另一个程序的子部分。在调试时我意识到我在分配 newNode(30) 时遇到错误。我不明白为什么?

在你的newNode()函数中,你正在做

struct node* temp;
temp->left = NULL;     //invalid memory access
temp->right = NULL;    //invalid memory access
temp->data = value;    //invalid memory access

但是,temp 没有分配任何有效内存。当您取消引用无效指针时,它会调用 undefined behavior

您需要先为 temp 分配内存,然后才能取消引用 temp。你可以利用 malloc() 和家人来完成这件事,比如

struct node* temp = malloc (sizeof *temp);
if (temp )
{
    temp->left = NULL;
    temp->right = NULL;
    temp->data = value;
}

应该完成工作。

您需要为新节点分配内存。喜欢

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

当你完成后,你必须记得再次 free 记忆。