-1

次の定義を使用して、cでリンクリストを作成しようとしています:

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

typedef struct{
    node * head;
} linkedlist;

そして、それを完全に削除する機能があります(単一のノードではなく、リスト全体に対して):

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 をコンパイラとして使用しています。

4

2 に答える 2

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);
}
于 2013-01-05T18:16:16.557 に答える
0
void clean_list(linkedlist * ll){
    node *temp, **ppp;

    for (ppp= &ll->head; temp = *ppp;   ){
      *ppp = temp->next;
      free(temp->val);
      free(temp);
      }
}
于 2013-01-05T18:23:04.947 に答える