有一个任务需要释放一个链表,我使用下面的第一个代码。但是有一些错误[什么错误?在检查员[什么检查员?],而是建议我使用第二个代码片段。但我看不出有什么区别。当下一个节点的地址存储在变量tmp中时,为什么第一个被认为是错误的?当释放head变量中分配的内存时,它不会丢失吗?
第一个代码:
while (head)
{
tmp = head->next;
free(head);
head = tmp;
}
第二个代码:
while (head)
{
tmp = head;
head = head->next;
free(tmp);
}
最后,有这两个选项,哪一个被认为是更准确和更有效的逻辑明智的?
1条答案
按热度按时间k5ifujac1#
假设两个版本中所涉及的变量的声明完全相同,那么这两个版本实际上做了同样的事情。
我想不出为什么一个比另一个更受欢迎。
有趣的是,当用gcc来完成这个操作时,两个版本都产生了完全相同的汇编代码:
Demo
... clang也是如此,它为两个版本生成以下内容:
Demo