首页 > 解决方案 > 如何在不释放内容的情况下释放指针?辅助变量

问题描述

在努力学习这种语言的过程中,我越来越多地尝试解决内存泄漏问题。我正在处理的程序是二叉搜索树,树的根始终位于tree->root->l. 现在如果我这样做...

BSTNode *search(BSTree *tree ,Item elem)
{
    BSTNode* aux;
    aux = tree->root->l;

    /*
    *    BSTNode not found.
    *
    */    
    if(notFound)
    {
         free(aux);
         free(found)
         return NULL;
    }
 // . . . . . .
}

它也会释放tree->root->l吗?如果是这样,我该如何避免?

标签: cpointersmemory-managementbinary-search-treefree

解决方案


指针本身是自动存储的,这意味着您不必担心分配或释放它。因此,您需要担心的不是指针,而是指针寻址的内存。这就是free发挥作用的地方。free不会释放指针,而是释放指针寻址的内存。

它也会释放tree->root->l吗?

它将释放auxtree->root->l指向的内存。

有问题的内存仍在被树使用,因此此时不应释放它。

如果是这样,我该如何避免?

删除free(aux);.

这是否意味着如果我留下这样的变量,它不会导致内存泄漏或不必要的使用资源?

正确的。您需要问自己的问题是“此指针寻址的内存是否仍在使用中?” 如果答案是肯定的,请不要释放它。如果答案是否定的,请释放它。


推荐阅读