【发布时间】:2014-02-07 05:17:07
【问题描述】:
假设我在 C 中有以下链表的实现:
List *create_node(int v) {
List *node = malloc(sizeof(List));
free(node);
node->value = v;
node->next = NULL;
return node;
}
List *add_node(List *h, int v) {
List *node = create_node(v);
node->next = h;
return node;
}
我想释放列表中的所有节点;我尝试编写函数
List *remove_list(List *h) {
while(h != NULL) {
List *x;
x = h;
h = h->next;
free(x);
}
free(x);
}
但它不起作用。如何释放链表中的所有节点?
【问题讨论】:
-
天啊!!这是什么:
List *node = malloc(sizeof(List)); free(node); node->value = v; -
free在你不再需要它的时候,而不是在你需要的时候。不知道那个无关的free()来自哪里,但可能只是一个错误或复制粘贴问题。在create_node中丢失free()。除了你的 remove_list 中的外部free(x)之外,其余的看起来都不错,它甚至没有机会编译,更不用说导致任何好的结果了。 -
编译时出现此错误:/usr/lib/gcc/i686-pc-cygwin/4.3.4/../../../libcygwin.a(libcmain.o): (.text+0xa9): undefined reference to `_WinMain@16' collect2: ld returned 1 exit status
-
@Mat.S 与您发布的问题完全不同。
-
@Mat.S 不知道你的代码是否正确。如果您解决了前面描述的问题,它可能更接近。而且您刚刚发布的不是编译问题,而是 link 问题,很可能是因为子系统类型未设置为控制台应用程序(至少 MS 的 cl 是这样工作的,不知道mingw 上的 gcc,但我想他们有类似的东西)。
标签: c memory linked-list