0

これがタスクです。リンクリストが表示され、すべてのメモリが解放され、ヘッドがに設定されNULLます。

これは私の機能です:

void free_list(struct Node *node)
{
    while (node)
    {
        free(node);
        node=node->next;
    }
}

エラーは出力されず、何も実行されません。そしてもう一つ、メモリが解放されたかどうかを確認する方法は?

4

3 に答える 3

0

これは宿題なので、サンプルコードではなく、何がうまくいかないかについてのヒント...

  1. node解放した後は確実にアクセスできません。node->next解放する前の値を格納します。
  2. Nodeポインターを値で渡しています。呼び出し元のポインターが必要な場合はNULL、代わりにポインターへのポインターを使用します。

メモリが解放されたことを確認するポータブルな方法はありませんが、プログラムの終了時にメモリがリークしていないことを確認したい場合は、 valgrindなどのツールを調べることができます。

メモリの場所の内容をチェックして、メモリが解放されたことを確認することはできないことに注意してください。呼び出しfreeは、メモリの所有権をシステムに戻すだけです。将来の任意の時点で再割り当てされる (およびその値が更新される) 可能性があります。

于 2012-12-19T10:39:34.240 に答える
0
  1. 現在のノードを解放する前に、次のノードを取得する必要があります
  2. ヘッドに割り当てたい場合は、そのアドレスを関数に渡す必要があります。
于 2012-12-19T10:40:00.577 に答える
0
void free_list(struct Node **head)
{
    struct node *nnode, *cnode;
    cnode = *head;

    while (cnode)
    {
        nnode = cnode->next;
        free(cnode);
        cnode = nnode;
    }

    *head = NULL;
}

このように呼びます..,,

free_list(&head);

編集:

  • 解放した後に同じノードにアクセスしnode=node->next;ています。ノードを解放する前に、次のポインターを保存する必要があります。
于 2012-12-19T10:51:47.337 に答える