我写了一个二叉搜索树,它工作正常,但我不确定我的程序是否释放了所有内存。
这是我对树节点的定义
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/