C 无法释放avltree中的根
我是C语言的新手,对指针或其他一些东西不太了解,所以我试图用C语言实现一个AVLTree,但我的代码中有错误。有些问题可能是愚蠢的,但我真的对这些事情感到困惑。对于这个,我想释放AVL树中的节点。但是我在使用指针、自由和其他东西时遇到了很多困难。我希望你能容忍我的错误 以下是我的AVL树结构:C 无法释放avltree中的根,c,pointers,tree,free,C,Pointers,Tree,Free,我是C语言的新手,对指针或其他一些东西不太了解,所以我试图用C语言实现一个AVLTree,但我的代码中有错误。有些问题可能是愚蠢的,但我真的对这些事情感到困惑。对于这个,我想释放AVL树中的节点。但是我在使用指针、自由和其他东西时遇到了很多困难。我希望你能容忍我的错误 以下是我的AVL树结构: typedef struct AVLTreeNode { int key; int value; int height; struct AVLTreeNod
typedef struct AVLTreeNode {
int key;
int value;
int height;
struct AVLTreeNode *parent;
struct AVLTreeNode *left;
struct AVLTreeNode *right;
} AVLTreeNode;
typedef struct AVLTree{
int size; // count of items in avl tree
AVLTreeNode *root; // root
} AVLTree;
AVLTreeNode *newAVLTreeNode(int k, int v )
{
AVLTreeNode *new;
new = malloc(sizeof(AVLTreeNode));
assert(new != NULL);
new->key = k;
new->value = v;
new->height = 0; // height of this new node is set to 0
new->left = NULL; // this node has no child
new->right = NULL;
new->parent = NULL; // no parent
return new;
}
AVLTree *newAVLTree()
{
AVLTree *T;
T = malloc(sizeof (AVLTree));
assert (T != NULL);
T->size = 0;
T->root = NULL;
return T;
}
我的自由功能是:
void destroy_avltree(AVLTreeNode *N)
{
if (N->left!=NULL) destroy_avltree(N->left);
if (N->right!=NULL) destroy_avltree(N->right);
if (N->parent && N->key < N->parent->key) N->parent->left = NULL;
if (N->parent && N->key > N->parent->key) N->parent->right = NULL;
free(N);
}
// put your time complexity analysis for freeAVLTree() here
void FreeAVLTree(AVLTree *T)
{
assert(T!=NULL);
destroy_avltree(T->root);
free(T);
}
void destroy\u avltree(AVLTreeNode*N)
{
如果(N->left!=NULL)销毁_avltree(N->left);
如果(N->right!=NULL)销毁_avltree(N->right);
如果(N->parent&&N->keyparent->key)N->parent->left=NULL;
如果(N->parent&&N->key>N->parent->key)N->parent->right=NULL;
自由(N);
}
//将freeAVLTree()的时间复杂性分析放在此处
void FreeAVLTree(AVLTree*T)
{
断言(T!=NULL);
销毁_avltree(T->root);
自由(T);
}
我可以释放除根节点之外的任何其他节点。
下面是我的结果,可能看起来像:
预订单树:
(7,7)(3,3)(1,1)(0,0)(2,2)(5,5)(4,4)(6,6)(11,11)(9,9)(8,8)(10,10)(13,13)(12,12)(14,14)
免费后:
(39674416,0)
它似乎仍然是某事物的指针,但我不知道出了什么问题
提前谢谢 调用
FreeAVLTree
后,T->root
指向什么?它应该指向那里吗?谢谢你的回复!我以为T->root被释放了。因为如果我在“destroy_avltree(T->root)”行之后添加“free(T->root)”,它会显示“double free or corruption”释放指针会将内存释放回系统-它不会将指针设置为NULL。非常感谢!!!突然,光线射向我:)没有你的帮助,我想不出来。@AShelly我还有一个关于这个程序中指针的问题。麻烦你帮忙方便吗?