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

sau*_*wal 2 c pointers memory-management dereference

我已经为树写了ac程序.

#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);

 }
Run Code Online (Sandbox Code Playgroud)

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

Sou*_*osh 6

在你的newNode()功能中,你正在做

struct node* temp;
temp->left = NULL;     //invalid memory access
temp->right = NULL;    //invalid memory access
temp->data = value;    //invalid memory access
Run Code Online (Sandbox Code Playgroud)

但是,temp没有分配任何有效的内存.当您取消引用无效指针时,它会调用未定义的行为.

您需要temp在取消引用之前分配内存temp.你可以利用malloc()和家人来完成这件事,比如,

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

应该完成工作.