c - 释放结构
问题描述
我有一个链表结构,我使用了一个节点结构来帮助我存储数据并知道每个节点指向的位置。在创建我的列表时,我这样做了:
struct list {
struct node *Head;
struct node *Tail;
}
struct node{
int val;
struct node * next;
}
struct list create_list(){
struct list new_list;
new_list = malloc(sizeof(struct list));
}
然后,当我试图释放我分配的列表时,我这样做了
void free_list(struct list linked_list){
free(linked_list);
}
但是,我意识到我可能分配错了,因为当你 malloc 时,你需要将它分配给一个指针。当我想释放我最初分配的linked_list 时,并没有真正改变。
我认为这可能是因为我发送到 free() 的linked_list 不是指针,因此没有进行任何更改。我尝试添加 & 和 * 到它,但我最终得到错误....
任何提示或帮助表示赞赏。
编辑:
修复了结构列表上的错字。
这是硬件,所以我无法更改函数的参数,这让我很难释放我创建的链表。这是因为函数 free_list() 无法将其参数更改为指针链表,所以我不知道具体该怎么做。
我还将记下我何时在 create_list 函数中为链表进行 malloc。
解决方案
是的,因为通过值传递链表而不是在堆上传递这么小的东西。
这更像你想要的:
struct list create_list(){
struct list new_list = { NULL, NULL };
return list;
}
void free_list(struct list linked_list){
struct node *next;
for (struct node *node = linked_list.Head; node; node = next;)
{
temp = node->next;
free(node);
}
}
因此仅释放分配给 的列表节点malloc()
。
推荐阅读
- javascript - 如何在浏览器 JavaScript 中实现“复制到剪贴板”?
- arrays - “无法读取未定义的属性‘推送’”Angular 9 组件
- android - 未找到默认活动。我看到了很多解决方案,但对我不起作用
- asp.net - asp.net 中的 JQuery 输入掩码
- firebase - 如何过滤字段值并将数据发送到 Firestore 集合?
- node.js - Node.js 中的 require 是什么
- python - 针对 x 轴上的两个分类变量制作 sns.swarmplot
- python - base64 编码输出不正确的结束字节
- vue.js - 如何停止axios在每个请求中发送cookie withCredentials false
- reactjs - 为什么 React.FC 不允许我只返回孩子?