首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我需要释放局部变量吗?

我需要释放局部变量吗?
EN

Stack Overflow用户
提问于 2013-09-28 22:36:33
回答 2查看 7.3K关注 0票数 12

我有下面的struct

代码语言:javascript
复制
typedef struct cell Cell;
struct cell {
    int value;
    int *nextcell;
};

我有以下功能来释放链接列表:

代码语言:javascript
复制
void freelist(Cell *beginning)
{
    Cell *thisCell = beginning;
    Cell *NextCell = beginning->nextcell;

   while (thisCell != NULL)
   {
        NextCell = thisCell->nextcell;
        free(thisCell);
        thisCell = NextCell;
   }

   /* Here comes my question. Do I need to free the following variables? */
   free(beginnig);
   free(thisCell);
   free(NextCell);
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-28 22:39:57

不,释放是为了动态分配内存,指针只是指向那里的变量。循环释放列表所占用的所有内存-此时没有什么可释放的,尝试再次释放相同的内存(开始)将导致错误。循环后的thisCell为空,那里甚至没有什么可以释放的东西。

如果您是指指针本身,它们不会动态地分配内存,当您定义它们时,它们在堆栈上各取一个槽,而离开该函数将释放该槽。在这里,我们只讨论指针本身(它们指向的地址存储的位置),而不是它们可能持有的指向内存。

票数 11
EN

Stack Overflow用户

发布于 2013-09-28 22:43:15

无论指针存储在何处--局部变量、全局/静态变量或在空闲存储本身上分配的指针中,都可以释放分配给它的内存。

您的函数多次释放几个指针:您不需要在函数底部释放这三个调用中的任何一个(尽管第二个调用是无害的,因为它将NULL传递给空闲,这总是可以的)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19072421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档