我用这两个结构创建了一个链表
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
变量名称是不同的,因为我给出的例子更简单,对不起这个烂摊子。
所以你可以看到,在运行我所做的功能后,并不是所有东西都被移除了。 * info指向已分配的内存地址 ID-仍然有内容
答案 0 :(得分:1)
所以你可以看到,在运行我所做的功能后,并不是所有东西都被移除了。 *指向已分配内存地址ID的信息 - 内容仍然包含
不需要实现更改值或删除任何内容。
一个普通的,令人敬畏的类比是在你退房后回到酒店房间。如果你把书放在桌子上,它可能仍然存在。这并不意味着您没有正确结帐,或者其他人无法检查房间。只是保证不再存在,只有傻瓜会依赖它。