如何解决为什么在单向链表的head_node(first_node)初始化时动态分配释放“两次”?
我想知道twice of dynamic allocation release.
的原因
我认为,在初始化头节点时只使用一次 free function
。
这是代码!! :)
int freeList(headNode* h){
listNode* p = h->first;
listNode* prev = NULL;
while(p != NULL) {
prev = p;
p = p->link;
free(prev); /* Here is a problem
What is a few errors with just coding free(prev)? */
}
free(h); /* Here is a problem */
return 0;
}
解决方法
free(prev)
和 free(h)
是关于不同的数据结构:
-
free(prev)
正在释放listNode
实例的内存 -
free(h)
正在释放headNode
实例的内存。
headNode
是一个有点令人困惑的名称,因为我认为该结构实际上并不代表列表中的 第一个 节点,而是列表的“容器”。它有一个 first
指针,它可以是 NULL
(如果表示的链表为空),也可以是指向第一个节点的指针。无论哪种方式,headNode
实例都不同于它可能引用的第一个节点的实例(仅当表示的链表不为空时)。
因此您的循环释放了列表中所有节点的内存,而对 free
的最终调用是关于 headNode
实例,它不是 of 的一个节点链表,但它是用于链表的容器。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。