我正在尝试将节点添加到C中的BST并将其打印出来。这是一个非常简单直接的实现,我得到了内存泄漏。我被困在这几个小时,请帮我看看有什么不对。我的代码是:
struct bstnode {
int item;
struct bstnode *left;
struct bstnode *right;
};
void destroy_tree(struct bstnode *t) {
if (NULL == t) {return;}
destroy_tree(t->left);
destroy_tree(t->right);
free(t);
}
void inorder_print(struct bstnode *t) {
if (NULL == t) {return;}
inorder_print(t->left);
printf(" %d", t->item);
inorder_print(t->right);
}
int main(void) {
struct bstnode *myt = malloc(sizeof(struct bstnode));
struct bstnode *l = myt->left ;
struct bstnode *r = myt->right;
l->item = 20;
l->left = NULL;
l->right = NULL;
r->item = 30;
r->left = NULL;
r->right = NULL;
myt->item = 25;
inorder_print(myt);
printf("\n");
destroy_tree(myt);}
我怀疑指针分配中有错误,请解释一下我犯了什么错误。
提前致谢!
答案 0 :(得分:1)
指针初始化为一个未知值,无论在创建过程中该内存区域是什么,所以假设它们是“脏”的,偏执的程序员在工作之前“清理”它们,但如果你理解使用指针则没有必要。清理的一种方法是为结构创建一个构造函数,将其内部指针初始化为NULL。现在你知道它们是NULL。 c ++中的研究构造函数。
现在添加构造函数,(使用malloc,因此不会自动调用构造函数,手动调用它,可以将其更改为Init()函数以防止语义问题)。当malloc时,立即调用Init()。现在再次检查你的代码,它有什么问题?错误是否更明确?
你只在第一行构建myt bstnode,L然后变成myt-> left(null / undefined),R
也是如此然后您访问L的内容,该内容为null,因此崩溃。