gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 12:59:05 24 4
gpt4 key购买 nike

我已经为树写了一个 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() 和 family 来完成此操作,例如,

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

应该完成工作。

关于c - 将新节点分配给树节点时程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37224871/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com