我用这两个指令创建了一个链表
typedef struct dog {
char *name;
int age;
} dog;
typedef struct alist {
dog* info;
struct alist *next;
} alist;
在这些指令中,我列出了狗的链表,看起来像这样:
所有红色气泡都是通过malloc生成的。
我试图创建一个功能,删除所有列表,狗类型变量,并释放所有分配的内存。
这是我尝试过的:
void free_dogs(alist* al){
if(al->next==NULL){
free (al->info->name);
free(al->info);
free(al);
return;
}
free_dogs(al->next);
free(al->info->name);
free(al->info);
free(al);
return;
}
该功能按我想要的那样在列表中导航,但它不会释放分配的内存,而且我不确定这是什么原因。
运行此功能后,仅删除* name属性。
我在做什么?
希望清楚,谢谢!
编辑:
这是我的调试器的图片:
http://i.imgur.com/A27mwZx.png
变量名称不同,因为我给出的示例更加简单,对不起。
如您所见,运行该函数后,我并未删除所有内容。
*信息指向分配的内存地址
ID-里面仍然有内容
最佳答案
如您所见,运行该函数后,我并未删除所有内容。 *指向分配的内存地址ID的信息-里面仍然有内容
无需实现即可更改值或删除任何内容。
一个普通的,很棒的类比是您退房后回到酒店房间。如果您将书放在桌子上,它可能仍然在那里。这并不意味着您没有正确退房,也没有房间可供其他人入住。只是不能保证它在那里了,只有傻瓜才会依靠它。
关于c - 释放C中分配的内存的麻烦,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43717854/