C语言 将 NULL 分配给二进制树中的子节点时的分段错误


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

相关内容

  • 没有找到相关文章

最新更新