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

C语言实现二叉搜索树触发LeakSanitizer内存泄漏问题求助

二叉搜索树内存泄漏问题修复方案

根因定位

  • 漏接Delete函数返回值:Delete函数执行删除操作后会返回新的树根节点地址,当被删除的是当前根节点时,返回的是新的根地址。你在main函数中直接调用Delete(root, x);未将返回值赋值给root变量,导致新根地址丢失,对应节点无法被后续操作访问和释放,产生内存泄漏。
  • 程序退出前未释放整棵树内存:所有未被删除、仍存在于树中的节点在程序结束前没有被主动释放,也会触发LeakSanitizer告警。

修复步骤

  1. 修正Delete调用逻辑
    将main函数中所有的Delete(root, x);替换为:
root = Delete(root, x);

确保root指针始终指向正确的树地址,所有删除的节点都能被正确free。
2. 新增树销毁函数
在代码中添加递归释放整棵树的函数:

void freeTree(struct node* root) {
    if (root == NULL) return;
    freeTree(root->left);
    freeTree(root->right);
    free(root);
}
  1. 程序退出前主动释放内存
    在main函数的while循环结束后、程序退出前,调用销毁函数释放所有剩余节点,同时补全返回值:
freeTree(root);
return 0;

完成以上修改后重新编译运行,即可解决内存泄漏问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 22:24:03