在学习这门语言的过程中,我越来越多地尝试解决内存泄漏问题。
我正在开发的程序是二叉搜索树,树的根始终位于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
?
它将释放 aux
和 tree->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/