我有一个非常简单的C代码用于构建单向链表,我使用malloc动态地为每个节点分配内存。在代码的结尾,我想要释放所分配的每个节点的内存,但不确定如何做到这一点 - 如果我从头节点开始释放,后续节点的指针会丢失并导致内存泄漏。
另一种方式是从头节点开始,并将节点指针存储在一个单独的指针数组中或类似的东西中,在遍历列表时存储节点指针,一直到尾节点,然后也将其存储到另一个指针数组中,并从该数组索引开始向后释放,直到头节点被释放为止。
那是实现我所尝试做的唯一方法吗?
如果我不想使用第二个缓冲区,该怎么办?
另一种方式是从头节点开始,并将节点指针存储在一个单独的指针数组中或类似的东西中,在遍历列表时存储节点指针,一直到尾节点,然后也将其存储到另一个指针数组中,并从该数组索引开始向后释放,直到头节点被释放为止。
那是实现我所尝试做的唯一方法吗?
如果我不想使用第二个缓冲区,该怎么办?
#include "stdio.h"
#include "stdlib.h"
struct lnk_lst
{
int val;
struct lnk_lst * next;
};
typedef struct lnk_lst item;
main()
{
item * curr, * head;
int i,desired_value;
head = NULL;
for(i=1;i<=10;i++)
{
curr = (item *)malloc(sizeof(item));
curr->val = i;
curr->next = head;
head = curr;
}
curr = head;
while(curr) {
printf("%d\n", curr->val);
curr = curr->next;
}
//How to free the memory for the nodes in this list?
for(i=1;i<=10;i++)
{
free()//?? What logic here
}
}