0

当我遍历链表时,它会出现故障。我不知道为什么会这样。我的任务是递归(所有函数)按顺序插入整数,创建一个检查整数的函数,打印列表,向后打印列表,删除一个节点,并删除整个列表。我在最后一部分,现在已经被困了一段时间。非常感谢。

void deleteList(node* head)
{
    node* temp;

    if(head == NULL)
        printf("List is empty\n");

    else
    {
        temp = head->next;
        free(head);
    }

    deleteList(head->next);
}
4

4 回答 4

4

您首先释放 head 使用的内存,然后将 head 的成员作为参数传递给“deleteList”。

我认为应该先 deleteList 然后再释放:

if (head)
{
    deleteList(head->next);
    free(head);
}
于 2013-03-19T05:20:57.013 回答
2

问问自己...为什么要存储变量temp。看起来你从来没有将它用于任何事情。

我认为您打算使用它,并且您可能应该使用它。

于 2013-03-19T05:24:18.320 回答
1

你已经解放了头脑,所以当你在做的时候

deleteList(head->next);

您正在访问无效内存,请使用您的临时变量。

deleteList(temp);
于 2013-03-19T05:25:42.460 回答
0

它应该是

    temp=head;
    head=head->next;
    free(temp);
    deleteList(head);
于 2013-03-19T05:28:34.167 回答