在C中释放已分配的内存的麻烦

时间:2017-05-01 10:45:23

标签: c malloc

我用这两个结构创建了一个链表

typedef struct dog {
   char *name;
   int age;
} dog;

typedef struct alist {
   dog* info;
   struct alist *next;
} alist;

这些结构我做了一个链的狗列表,它看起来像这样: enter image description here 所有的红色气泡都是用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-仍然有内容

1 个答案:

答案 0 :(得分:1)

  

所以你可以看到,在运行我所做的功能后,并不是所有东西都被移除了。 *指向已分配内存地址ID的信息 - 内容仍然包含

不需要实现更改值或删除任何内容。

一个普通的,令人敬畏的类比是在你退房后回到酒店房间。如果你把书放在桌子上,它可能仍然存在。这并不意味着您没有正确结帐,或者其他人无法检查房间。只是保证不再存在,只有傻瓜会依赖它。