c - 删除链表中的每个节点

标签 c linked-list

我有一个歌曲库链接列表,我试图删除它,但是当我测试它时,我的数据仍然存在并且没有释放。

deleteAllNodes(head);
if (head == NULL)
    printMusicLibraryEmpty();

我正在尝试测试如果我的头现在为空,我将打印我的空消息,但现在它没有打印,这意味着数据没有被删除。

Node *deleteAllNodes(Node *head) {
while (head != NULL) {
    Node *firstNode = head;
    songNameDeleted(firstNode -> songName);
    head = head -> link;
    free(firstNode);
    firstNode = NULL;
}
return NULL;
} 

最佳答案

在你的调用函数中,head仍然会指向第一个节点的内存位置,即使你的节点都被释放了。要更改调用函数中的 head,您有两种选择:

1) 设置head = deleteAllNodes(head);

2) 将指针传递给 head,并将 deleteAllNodes(Node *head) 更改为 deleteAllNodes(Node **head)。在该函数中,您可以设置*head = NULL

关于c - 删除链表中的每个节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33832150/

相关文章:

c - 结构数据日志无法正常工作?

c - 用 linux/list.h 初始化链表

c - 编译器会处理像 if(0) 这样无用的代码吗?

c - xxd 二进制转储问题

Javascript 链接列表引用

CPU 操作 windows profiler 工具

c++ - 链接列表和从文本文件中读取

c - Valgrind/内存错误

c - 从二进制文件读取用户信息到链表

c++ - 在 C++ 中创建链表