首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >递归删除链表

问递归删除链表
EN

Stack Overflow用户
提问于 2021-11-07 07:28:49
回答 1查看 31关注 0票数 1

我是编程新手,在递归删除链表时遇到了问题。

代码语言:javascript
复制
int main(void)
{
    node *head = NULL;
    head = push_f(head);
    head = push_f(head);
    head = push_f(head);

    print(head);

    delete_l(head);
    print(head);
}

void delete_l(node *head)
{
    if (head == NULL)
    {
        return;
    }
    
    delete_l(head->next);
    free(head);
}

然而,它似乎只删除了最后两个节点。enter image description here

EN

回答 1

Stack Overflow用户

发布于 2021-11-07 07:48:25

在调用函数delete_l之后

代码语言:javascript
复制
delete_l(head);

main中的指针head未更改,因为该函数处理指针的值的副本。因此,它仍然指向列表中已删除的第一个节点。

该函数确实释放了已分配的内存。以及函数print的下一次调用

代码语言:javascript
复制
print(head);

只是通过访问释放的内存来调用未定义的行为。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69870516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档