free() 到全局链表 C

亚历克斯·瓦尔塔诺夫

我的程序中有一些全局链表,还有一个“通用”函数,它获得指向头的指针,并释放所有节点:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章