我有这个密码:
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/