首页 > 解决方案 > 释放结构

问题描述

我有一个链表结构,我使用了一个节点结构来帮助我存储数据并知道每个节点指向的位置。在创建我的列表时,我这样做了:

struct list {
 
 struct node *Head;
 struct node *Tail;
}

struct node{
  int val;
  struct node * next;
}
struct list create_list(){
    struct list new_list;
    new_list = malloc(sizeof(struct list));
}

然后,当我试图释放我分配的列表时,我这样做了

void free_list(struct list linked_list){

  free(linked_list);
}

但是,我意识到我可能分配错了,因为当你 malloc 时,你需要将它分配给一个指针。当我想释放我最初分配的linked_list 时,并没有真正改变。

我认为这可能是因为我发送到 free() 的linked_list 不是指针,因此没有进行任何更改。我尝试添加 & 和 * 到它,但我最终得到错误....

任何提示或帮助表示赞赏。

编辑:

修复了结构列表上的错字。

这是硬件,所以我无法更改函数的参数,这让我很难释放我创建的链表。这是因为函数 free_list() 无法将其参数更改为指针链表,所以我不知道具体该怎么做。

我还将记下我何时在 create_list 函数中为链表进行 malloc。

标签: cpointersstructmalloc

解决方案


是的,因为通过值传递链表而不是在堆上传递这么小的东西。

这更像你想要的:

struct list create_list(){
    struct list new_list = { NULL, NULL };
    return list;
}

void free_list(struct list linked_list){
    struct node *next;
    for (struct node *node = linked_list.Head; node; node = next;)
    {
        temp = node->next;
        free(node);
    }
}

因此仅释放分配给 的列表节点malloc()


推荐阅读