我为树编写了一个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)
时遇到错误。我不明白为什么?
答案 0 :(得分:6)
在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;
}
应该完成工作。
答案 1 :(得分:3)
您需要为新节点分配内存。像
struct node* temp;
temp = malloc(sizeof(struct node));
当你完成后,你必须再次记住free
记忆。