假设我在 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);
}
但是这不起作用。如何释放链表中的所有节点?
最佳答案
您必须在 create_node
代码本身中遇到段错误,因为您取消引用已释放的内存:
...
List *node = malloc(sizeof(List));
free(node);
node->value = v;
...
您已经释放
您创建的所有节点,然后取消引用该位置,您的remove_list
甚至不会被调用。
关于c - 释放链表中的节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21619904/