以下は、aを作成する単純なプログラムで、リンクされたリストを解放します。しかし、私はfree_list関数が割り当てられたすべてのメモリが解放されることを保証するかどうかは不明です。リンクリストが解放されていることを確認する
int main(int argc, char *argv[])
{
struct node *head = build_list();
free_list(head);
return 0;
}
build_list()単純な三の員リスト作成:ここ
は、単に他の二つの機能を呼び出す主な機能は、である)
struct node *build_list()
{
struct node *head = malloc(sizeof(struct node));
struct node *two = malloc(sizeof(struct node));
struct node *three = malloc(sizeof(struct node));
head->data = 0;
head->next = two;
two->data = 1;
two->next = three;
three->data = 2;
three->next = NULL;
return head;
}
とfree_listを(解放しようとしシーケンス内のリストの各メンバー:
void free_list(struct node *curr)
{
struct node *tmp;
while (curr) {
tmp = curr;
curr = tmp->next;
free(tmp);
}
}
私の質問は、かどうか、この自由ですすべての割り当てられたメモリ。それは必要なように見えますが、use * tmpによってメモリブロックが割り当てられたままになるかどうかはわかりません。最後に、リンクされたリストを解放するためのベストプラクティスについてのアドバイスは、非常に高く評価されます。
ありがとうございました!
struct node {
int data;
struct node *next;
};
方法であって、それはループの外で使用されていないので、 ここで考慮すべき唯一の変更は、ループの体内に
tmp
それを宣言していますか?また、tmpはNULLに設定して、ぶら下がっているポインタでないか、不要なポインタにする必要がありますか? –@wm単独リンクされたリストの場合、あなたがコード化した1つの妥当な解放方法があります。再帰的なものをコード化することもできますが、それは再帰の乱用になります。 – dasblinkenlight