我有这个密码:

        typedef struct node
    {
        int data;
        struct node *left;
        struct node *right;
} node;

void Build (node *root , int i)
{
        if (i < 7)
    {
        root = (node *)malloc (sizeof(node));
        root->data = i;
        Build(root->left,2*i+1);
        Build(root->right,2*i+2);
    }
    else
        root = NULL;
}
void Print (node *root)
{
    if (root)
    {
        printf ("%d  ",root->data);
        Print(root->left);
        Print(root->right);
    }
}
void main()
{
    node *tree;

    Build(tree,0);
    Print(tree);
}

有两件事我不明白,
一。为什么我不能传递Build(tree,0)?它说它是未初始化的,但为什么我要关心它是否未初始化?我马上分配所有需要的内存,所以它将指向新分配的节点。
我该如何修复此代码?谢谢您!!!

最佳答案

您的node *到树未初始化。

node *tree;

这很重要,因为代码行
root = (node *)malloc (sizeof(node));

将内存分配给根的本地副本。一旦离开Build的函数作用域,根的副本就会超出作用域。内存泄漏。
记住,所有东西都是用C值传递的。
如果您真的希望Build分配内存,则签名必须是
void Build (node **root , int i)

而该方法中的代码必须引用*root而不是root

关于c - 传递未初始化的变量,使用C引发错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11551848/

10-10 12:39