我无法释放结构。我对'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个错误。
答案 0 :(得分:2)
您不能在同一范围内两次声明变量。这就是为什么您会遇到重新定义错误的原因。
您的列表指针也是一个变量。您不得在主函数中重新声明l
。
您的编译器已经知道它是list *
,因此您应该删除第19行的list *
。
我还认为您误解了free
的工作。它会分配用malloc
分配的内存,从而使指针地址处的内存在程序中不可用。您必须重新使用malloc
(或者您可以直接使用realloc
,而无需先使用free
)。