我的程序中有一些全局链表,还有一个“通用”函数,它获得指向头的指针,并释放所有节点:
void freelist(list* head) {
list* tmp;
while (head != NULL) {
tmp = head;
head = head->next;
free(tmp);
}
}
函数运行良好,最后,指向列表(头)的本地指针变成了NULL
. 但是列表的全局指针不会更改为NULL
,并且仍然指向“空”列表的开头(不是我的值,释放后的值)。
假设您的最后一个节点指向 NULL,并且您需要在 freekist 中使用双指针来使您的全局指针为 NULL。
换句话说,如果您想将全局头更改为 NULL,请将 globalHead 的地址提供给 freelist 函数,为此您需要双指针。
你可以像下面这样调用freelist。
freelist(&globalHead);
您的自由列表定义如下所示。
void freelist(list **head)
{
list* tmp;
if(head ==NULL)
return;
while(*head!=NULL)
{
tmp=*head;
*head=(*head)->next;
free(tmp);
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句