我是编程新手,在递归删除链表时遇到了问题。
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
发布于 2021-11-07 07:48:25
在调用函数delete_l之后
delete_l(head);main中的指针head未更改,因为该函数处理指针的值的副本。因此,它仍然指向列表中已删除的第一个节点。
该函数确实释放了已分配的内存。以及函数print的下一次调用
print(head);只是通过访问释放的内存来调用未定义的行为。
https://stackoverflow.com/questions/69870516
复制相似问题