C中free报错:heap corruption detected

这是一个关于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的地方也打出来,看地址是否一致,如果不一致肯定不行。