#include<stdio.h>
#include<stdlib.h>
typedef struct BTreeNode BTNode;
struct BTreeNode
{
int value;
struct BTreeNode *left_child,*right_child;
};
int insert(int input_value, BTNode *head_node)
{
BTNode *temp,*head;
temp->value = input_value;
temp->left_child = NULL;
temp->right_child = NULL;
head = head_node;
// while(1)
{
if(head == NULL)
{
head = temp;
// break;
return 0;
}
if(temp->value > head->value)
{
head = head->right_child;
}
else if(temp->value < head->value)
{
head = head->left_child;
}
else
{
// break;
}
printf("Inserted successfullyn");
}
return 1;
}
int main()
{
BTNode *root=NULL;
insert(23,root);
}
我正在尝试在二叉搜索树中插入一个新值。在下面的代码中,我在插入函数中的"temp->left_child = NULL;"行处遇到分段错误。我不明白为什么我会得到这个,任何人都可以帮我解决???
Do temp = malloc (sizeof (BTNode))
.
您从未分配过空间对于temp
指向的位置,因此它试图将数据保存到内存中那不属于它。这会导致意外行为。你幸运的是,您遇到了分段错误。
注意:您打算如何更改树的根?我不能从您的代码中找出这一点。也许您可以返回根节点每次从你的函数中,比如:BTNode* insert(int input_value, BTNode *head_node)
或使用双指针,例如:int insert(int input_value, BTNode **head_node)
和在insert
里面做*head_node
。请看这里,好好读一下指针和 C 语言中的内存分配。
当然,缺少内存分配。 你把一个参数root
null 传递给你的函数,然后你声明一个指针temp
没有任何内存分配,然后你取消引用它 - 不好。
BTNode *temp,*head;
temp->value = input_value;
使用温度时未分配空间。所以它应该是:
BTNode *temp,*head;
temp = malloc(sizeof(BTreeNode));
temp->value = input_value;
没有分配给 temp 的内存。你应该这样做:
BTNode * createNode()
{
return ((node *)malloc(sizeof(node)));
}
int insert(int input_value, BTNode *head_node)
{
BTNode *temp,*head;
temp = createNode();
temp->value = input_value;
temp->left_child = NULL;
temp->right_child = NULL;
}
首先将内存分配给临时节点。应该是这样的,
BTNode *temp,*head;
temp = malloc(sizeof(BTNode));
temp->value = input_value;
temp->left_child = NULL;
temp->right_child = NULL;