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

C语言DTC节点内存释放函数失效,仅释放两个节点求助

内存未完全释放问题的解决方法

你的递归释放函数存在核心错误:只有叶子节点(即higher和lower都为NULL的节点)会被调用free(),所有非叶子节点(包括根节点)都不会被释放。这就是为什么valgrind显示只释放了两个节点——它们应该是树的叶子,而根节点和其他中间节点都没被回收。

修正后的free_nodes函数需要:

  • 先判断传入的指针是否为NULL,避免空指针访问
  • 递归释放完子节点后,直接释放当前节点,不需要额外判断
void free_nodes(node* a) {
    if (a == NULL) {
        return;
    }
    // 递归释放左子树
    free_nodes(a->lower);
    // 递归释放右子树
    free_nodes(a->higher);
    // 释放当前节点
    free(a);
}

这样修改后,每个节点都会在它的所有子节点被释放后,自身被正确释放。不管是叶子节点还是非叶子节点,都会走到free(a)这一步,确保整个树的内存都被完整回收。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 10:32:01