如何删除C中的链表?

时间:2013-01-05 17:55:36

标签: c memory linked-list malloc free

我正在尝试使用以下def创建一个链接列表:

/**
 * The definition of node and linked list.
 */
typedef struct _node{
    void * val;
    struct _node * next;
} node;

typedef struct{
    node * head;
} linkedlist;

我有一个完全删除它的功能(不是一个sigle节点,而是整个列表):

void clean_list(linkedlist * ll){
    node * temp;
    curr = ll->head;

    while(ll->curr->next != NULL){
    temp = curr;
    curr = curr->next;
    free(temp->val);
    free(temp);
    }
}

我的问题是:

  • 有用吗?
  • 我如何知道它是否真的有效?

我正在使用MacBook Pro并使用gcc作为编译器。

2 个答案:

答案 0 :(得分:2)

我永远不会理解为什么拥有编译代码的人会发布不编译的代码。但是,假设链接列表本身需要被释放,这就是我接近它的方式(未经测试):

void clean_list(linkedlist *pll)
{
    node *pnext;

    for (node *pnode = pll->head; pnode != NULL; pnode = pnext)
    {
        pnext = pnode->next;
        free(pnode->val);
        free(pnode);
    }
    free(pll);
}

答案 1 :(得分:0)

void clean_list(linkedlist * ll){
    node *temp, **ppp;

    for (ppp= &ll->head; temp = *ppp;   ){
      *ppp = temp->next;
      free(temp->val);
      free(temp);
      }
}