c - 如何在不释放内容的情况下释放指针?辅助变量
问题描述
在努力学习这种语言的过程中,我越来越多地尝试解决内存泄漏问题。我正在处理的程序是二叉搜索树,树的根始终位于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
发挥作用的地方。free
不会释放指针,而是释放指针寻址的内存。
它也会释放
tree->root->l
吗?
它将释放aux
和tree->root->l
指向的内存。
有问题的内存仍在被树使用,因此此时不应释放它。
如果是这样,我该如何避免?
删除free(aux);
.
这是否意味着如果我留下这样的变量,它不会导致内存泄漏或不必要的使用资源?
正确的。您需要问自己的问题是“此指针寻址的内存是否仍在使用中?” 如果答案是肯定的,请不要释放它。如果答案是否定的,请释放它。
推荐阅读
- android - Android 小部件 - 如何仅使用多个小部件调用一个 appWidgetProvider
- sql - 获取由某个列分组的所有列的整行,在其他列中第一次出现重复值
- amazon-web-services - 如何集成我的烧瓶 webapp 以获得 aws cognito 登录?
- java - Spark 数据集过滤器失败记录和写入 s3 失败并出现错误
- python - 在 xarray 中绘制 Sentinel-5P 数据
- reactjs - 背面的 React Native Navigation 刷新列表屏幕
- python - 如何使用 PRAW 仅发送图片
- android - 您如何存储用户输入数据中的值?
- javascript - 我无法使用 FlatList 渲染功能组件
- javascript - 使用 Xpath 如何选择具有特定 innerText 的元素的多个父类?