无法释放结构

时间:2019-03-20 07:32:21

标签: c struct free

我无法释放结构。我对'free(void *)'的理解是,释放指针后,变量和内存地址可以重用。下面不是这种情况,

struct list {
  struct list_node * head;
  int size;
  };
typedef struct list list;

//create
list * create_list() {
    list * l = (list *) malloc(sizeof(list));
    l->head = NULL;
    l->size = 0;
    return l;
}

int main(int argc, char const *argv[]) {

    list * l = create_list();
    free(l);
    list * l = create_list();

    return 0;
}
  

main.c:25:12:错误:“ l”的重新定义       list * l = create_list();              ^ main.c:23:12:注意:先前的定义在这里       list * l = create_list();              产生了^ 1个错误。

1 个答案:

答案 0 :(得分:2)

您不能在同一范围内两次声明变量。这就是为什么您会遇到重新定义错误的原因。

您的列表指针也是一个变量。您不得在主函数中重新声明l

您的编译器已经知道它是list *,因此您应该删除第19行的list *

我还认为您误解了free的工作。它会分配用malloc分配的内存,从而使指针地址处的内存在程序中不可用。您必须重新使用malloc(或者您可以直接使用realloc,而无需先使用free)。