C语言 我需要释放局部变量吗?



我有以下struct

typedef struct cell Cell;
struct cell {
    int value;
    int *nextcell;
};

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

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);
}

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新