我想编写一个小函数来释放链表的内存。已使用malloc创建节点。
典型的功能是:
void freeList(struct node* head)
{
struct node* tmp;
while (head != NULL)
{
tmp = head;
head = head->next;
free(tmp);
}
}
我的问题是我收到以下错误,我不知道如何修复它们:
警告:从不兼容的指针类型tmp = l;
进行分配错误:'linked_list'没有名为'next'l = l - >的成员下;
声明如下:
struct node_s {
struct node_s *next;
char msg[MAX_MSG_LEN];
unsigned int time;
};
typedef struct node_s node;
struct linked_list_s {
node *head;
};
typedef struct linked_list_s linked_list;
void list_free(linked_list *l) {
struct node *tmp;
while (l !=NULL) {
tmp = l;
l = l -> next;
free(tmp);
}
}
答案 0 :(得分:1)
您需要将l->head
分配给tmp
函数中的list_free()
变量,并在free()
tmp
时使用另一个变量来存储下一个节点,例如此
void list_free(linked_list *l)
{
struct node *tmp;
struct node *next;
if (l == NULL)
return;
tmp = l->head;
while (tmp != NULL)
{
next = tmp->next;
free(tmp);
tmp = next;
}
}