删除链表C时出现段错误

时间:2013-03-19 05:18:26

标签: c recursion linked-list

当我浏览链表时,它会出现故障。我无法弄清楚为什么会这样做。我的任务是RECURSIVELY(所有函数)按顺序插入整数,创建一个函数来检查整数,打印列表,向后打印列表,删除节点,以及删除整个列表。我是最后一部分,现在已经停留了一段时间。非常感谢。

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

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

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

    deleteList(head->next);
}

4 个答案:

答案 0 :(得分:4)

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

我认为它应该是第一个deleteList然后免费:

if (head)
{
    deleteList(head->next);
    free(head);
}

答案 1 :(得分:2)

问问自己......为什么要存储变量temp。它看起来并不像你曾经用过任何东西。

我认为你意味着使用它,你可能应该使用它。

答案 2 :(得分:1)

你已经自由了,所以当你做的时候

deleteList(head->next);

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

deleteList(temp);

答案 3 :(得分:0)

应该是

    temp=head;
    head=head->next;
    free(temp);
    deleteList(head);