我试图编写一个简单的函数来释放动态分配的内存
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,3 个值(即 head_new->data)按原样返回。我的问题:这是一种错误吗?或者有这样的价值观是正常的?这件事与我有关,因为没有免费的返回类型,那么它如何显示相同的值?请帮助我清除我的疑问。