我用这两个指令创建了一个链表

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/

10-11 22:58
查看更多