You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

二叉树销毁代码失效问题排查及修正方法咨询

二叉树销毁函数的错误分析与修正

核心错误点

你写的销毁函数逻辑本身是正确的(后序遍历先销毁左右子树,再释放当前节点),问题出在调用时的传参错误:

  • BinaryTreeDestory(&*root) 这行代码里,&*root 等价于 root,本质是把BTNode*类型的指针值传给了要求BTNode**类型参数的函数。
  • 这会导致两个问题:一是编译器会触发类型不匹配的警告;二是函数内部的*root = NULL只会修改函数参数的临时拷贝,main里的root变量仍然保留原来的堆地址,变成野指针。

修正方法

把main里的调用代码改成:

BinaryTreeDestory(&root);

这里传递的是main中root变量的地址(BTNode**类型),这样销毁函数就能正确地在释放内存后,把main里的root置为NULL,彻底避免野指针问题。

修正后的完整main函数

int main()
{
    BTDataType a[] = "ABD##E#H##CF##G##";
    int i = 0;

    BTNode* root = BinaryTreeCreate(a, &i);
    BinaryTreeDestory(&root);
}

内容的提问来源于stack exchange,提问作者yuzhiU

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 22:32:27