動的に割り当てられたメモリを解放する単純な関数を作成しようとしていました
typedef struct list{
int data;
struct list * link;
} list;
list * head = NULL;
void release(list * head_new){
list * dummy = NULL;
while(head_new != NULL){
dummy = head_new->link;
printf("before freeing %p, %d", head_new->link, head_new->data);
free(head_new);
printf("free returns %p, %d", head_new->link, head_new->data);
head_new = dummy
}
}
メイン関数を使用して値がリストに与えられ、この特定の関数では head_new ノードを解放した後でも、いくつかの値が出力されます
1
12
1
123
1 12 1 123 before freeing 00622A40, 1
free returns 006200C4, 6433408
before freeing 00622A60, 12
free returns 006200C4, 6434048
before freeing 00622A70, 1
free returns 006200C4, 6433344
before freeing 00000000, 123
free returns 00000000, 123
お気づきの場合..最後の 2 行はデータの同じ値を返します..さらに大きなリストでこれを試しました。同じことが起こります!最後の 2,3 個の値 (つまり、head_new->data) がそのまま返されます。私の質問: これは一種のバグですか? または、そのような値を持つのは正常ですか?free の戻り値の型がないので、このことは私に関係があります。私の疑問を解消するのを手伝ってください。