c - 如何使用 C 释放二叉树?

标签 c memory-management

我写了一个二叉搜索树,它工作正常,但我不确定我的程序是否释放了所有内存。

这是我对树节点的定义

typedef struct node  {
    int val;
    struct node *left, *right;
} nodeOfTree;

我写这个函数输出结果并释放所有节点,看起来答案是正确的但内存没有释放。

void outputAndDestroyTree(nodeOfTree *root)  {
    if (!root) {return;}
    outputAndDestroyTree(root->left);
    printf("%d ", root->val);
    outputAndDestroyTree(root->right);
    free(root);      // I free this pointer, but after doing that, I can still access this  pointer in the main() function
}

这是否意味着我不能在递归函数中释放一段内存?谢谢~~~~~

更新:谢谢大家~

最佳答案

您的代码看起来没问题,但释放分配的内存不会神奇地将它的引用指针设置为 NULL。由于您没有为指针设置新值,因此旧地址将保留在那里,不受影响。也许你甚至可以从中读取而不会崩溃,尽管它是未定义的行为。

如果您希望在释放内存后将其设置为NULL,那么就这样做吧。调用 outputAndDestroyTree(root->left); 然后执行 root->left = NULL;

关于c - 如何使用 C 释放二叉树?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15726249/

相关文章:

c - fwrite 一直失败不知道为什么

c - c中计算机计算能力的上界

c - 我在 Bison 中的 C 函数?

c# - C# 中 coSTLy 对象的内存管理/缓存

c - 当代码中没有未初始化的全局或静态变量时,为什么 bss 段包含初始 4 个字节

c++ - 删除其引用在三个不同列表中维护的指针对象

c - 了解 GDB 中基本 C 程序中的 asm 指令

.net - .NET 业务层中的结构与类

c# - Int/Int64 .Net 内存分配

c - 使用 glib typedef(gint 等)的目的是什么?