これがタスクです。リンクリストが表示され、すべてのメモリが解放され、ヘッドがに設定されNULL
ます。
これは私の機能です:
void free_list(struct Node *node)
{
while (node)
{
free(node);
node=node->next;
}
}
エラーは出力されず、何も実行されません。そしてもう一つ、メモリが解放されたかどうかを確認する方法は?
これは宿題なので、サンプルコードではなく、何がうまくいかないかについてのヒント...
node
解放した後は確実にアクセスできません。node->next
解放する前の値を格納します。Node
ポインターを値で渡しています。呼び出し元のポインターが必要な場合はNULL
、代わりにポインターへのポインターを使用します。メモリが解放されたことを確認するポータブルな方法はありませんが、プログラムの終了時にメモリがリークしていないことを確認したい場合は、 valgrindなどのツールを調べることができます。
メモリの場所の内容をチェックして、メモリが解放されたことを確認することはできないことに注意してください。呼び出しfree
は、メモリの所有権をシステムに戻すだけです。将来の任意の時点で再割り当てされる (およびその値が更新される) 可能性があります。
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;
ています。ノードを解放する前に、次のポインターを保存する必要があります。