【发布时间】:2014-04-12 14:02:44
【问题描述】:
这是由比我更擅长 C 编程的人完成的。
对 C 中 free() 的用法感到困惑
下面是链表的结构
typedef struct node {
int value;
struct node *next;
} ListNode;
typedef struct list {
ListNode *head;
} LinkedList;
在创建了一个包含一些节点的列表之后
他的代码在退出时会这样做
void deleteList(LinkedList *ll) {
if (ll != NULL) {
ListNode *temp;
while (ll->head) {
temp = ll->head;
ll->head = temp->next;
free(temp);
}
free(ll);
}
}
以上是我不明白的。为什么他需要创造这样的复杂性,为什么不干脆做free(ll)。 请帮忙
提前致谢。
【问题讨论】:
-
你必须
free你malloc的每一件事。 -
您对链表的理解程度如何?这里有一个简短的解释或一个很长的解释......
-
记住每个分配操作都应该反过来。查看将节点添加到列表的实现 - 这应该会给你一个线索。
-
实际上,每个分配操作都应该反过来除非你把房子拆了,平台会帮你做。在后一种情况下它很忙,虽然可能有用用于泄漏检测。扩展该主题,如果您知道您的应用程序在其整个生命周期(必须很短)中永远不会分配太多内存,则所有释放都可以推迟到退出。这也允许更有效地实现内存分配器。
-
@SanJacinto:听说过未来的折扣吗?现在让你的程序变得更快、更简单、更便宜,比为模糊的未来工作更有价值,在这种未来你可能最终在某些情况下想要将它转换为恶魔或库。
标签: c memory-management linked-list