C LinkedList - 如何释放内存?

时间:2015-06-26 17:12:59

标签: c memory linked-list malloc

我想编写一个小函数来释放链表的内存。已使用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);
  }
}

1 个答案:

答案 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;
    }
 }