gpt4 book ai didi

c - C 中释放分配内存的问题

转载 作者:行者123 更新时间:2023-11-30 19:09:08 27 4
gpt4 key购买 nike

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

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-里面还有内容

最佳答案

so as you can see, after running the function i made not everything are removed. *info pointing to allocated memory address ID- still have content inside

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

一个常见且很棒的类比是在您退房后返回酒店房间。如果您把一本书留在 table 上,它可能还在那里。这并不意味着您没有正确退房,或者该房间无法供其他人入住。只是不再保证存在,只有傻瓜才会依赖它。

关于c - C 中释放分配内存的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43717854/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com