我有一个歌曲库链接列表,我试图删除它,但是当我测试它时,我的数据仍然存在并且没有释放。
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/