我有下面的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);
}发布于 2013-09-28 22:39:57
不,释放是为了动态分配内存,指针只是指向那里的变量。循环释放列表所占用的所有内存-此时没有什么可释放的,尝试再次释放相同的内存(开始)将导致错误。循环后的thisCell为空,那里甚至没有什么可以释放的东西。
如果您是指指针本身,它们不会动态地分配内存,当您定义它们时,它们在堆栈上各取一个槽,而离开该函数将释放该槽。在这里,我们只讨论指针本身(它们指向的地址存储的位置),而不是它们可能持有的指向内存。
发布于 2013-09-28 22:43:15
无论指针存储在何处--局部变量、全局/静态变量或在空闲存储本身上分配的指针中,都可以释放分配给它的内存。
您的函数多次释放几个指针:您不需要在函数底部释放这三个调用中的任何一个(尽管第二个调用是无害的,因为它将NULL传递给空闲,这总是可以的)。
https://stackoverflow.com/questions/19072421
复制相似问题