c - 如何在不释放内容的情况下释放指针?辅助变量

标签 c pointers memory-management binary-search-tree free

在学习这门语言的过程中,我越来越多地尝试解决内存泄漏问题。 我正在开发的程序是二叉搜索树,树的根始终位于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吗?如果是这样我该如何避免?

最佳答案

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

will it also dealocate tree->root->l?

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

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

how do I avoid it if so?

删除free(aux);

Does this mean that if I leave variables like this it wouldn't cause a memory leak or unnecessarily used recourse?

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

关于c - 如何在不释放内容的情况下释放指针?辅助变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56194146/

相关文章:

c++ - 是否有一个函数接受 2 个指针并返回一个非 NULL 的指针?

memory-management - 当一个程序被操作系统从文件系统加载到内存中时,操作系统如何知道这个程序有多大?

java - 为什么调用 System.gc() 会导致内存使用量显着减少?

c - 位域及其对齐方式在 C 编程中如何工作?

c - 使用模换行文本

c++ - 在不创建临时指针的情况下传递指向函数指针的指针

c - C语言中双变量数据类型的算术位移位

c - 如何在 x32 和 x64 中保持结构体大小不变?

c - clang 和 gcc 之间的行为差​​异?

c - C中输出的递归顺序