编译c++时我遇到一个SIGABRT的问题,但是我不知道如何修改怎么样的报错,我尝试各种方法去释放它,都不行
你这个root是malloc创建的吗?
void FreeTree(void* &Root)
{
struct BinaryNode *root = (truct BinaryNode *)Root;
if(root ==NULL)
return;
else
{
FreeTree(root->Lchild);
FreeTree(root->Rchild);
free(root->Lchild);
root->Lchild = 0;
free(root->Rchild);
root->Rchild = 0;
free(root);
root = 0;
}
}
可能被释放了多次,而且代码也不判空肯定会有问题。有帮助请采纳谢谢。
原因已经找到了
拷贝树的时候没有用递归导致除了根节点在堆区,其他节点都在栈区
free函数只能释放堆区已经申请的空间
下面是出错代码
struct BinaryNode *lchild = root->Lchild;
struct BinaryNode *rchild = root->Rchild;
应该为
struct BinaryNode *lchild = copytree(root->Lchild);
struct BinaryNode *rchild = copytree(root->Rchild);