这是一个关于AVL树的问题,我对current复制后,并没有改动其内容,怎么会free报错呢?求教!
以下是删除AVL节点的函数,在图中画红线的地方报了错。
free前需要判断是否为NULL,代码修改如下:
//原始代码
if(parent->left == current){
parent->left = NULL;
free(current);//这里需要判断current是不是NULL
}
//上述代码修改为:
if(parent->left == current){
if(current) free(current);
parent->left = NULL;
}
得确定你的current找对了么,如果current没找对,free的时候肯定跟alloc的对不上。可以把alloc内存的地方打印出来,看下地址是多少,在current free的地方也打出来,看地址是否一致,如果不一致肯定不行。