0xC0000005:写入位置0x00000004时发生访问冲突


int free_link(LINE*& head)
{
    LINE* p = head;
    if(p!=NULL)
    do
    {
        p->data = NULL;
        free(p->data);
    } while ((p = p->next) != NULL);
    head->next = NULL; (0xC0000005:写入位置0x00000004时发生访问冲突)
    return 0;
}

这样该怎么改呀

你题目的解答代码如下:

int free_link(LINE*& head)
{
    LINE* p = head->next, q;
    if(p!=NULL) 
        do
        {
            free(p->data);
            q = p->next;
            free(p);
            p = q;
        } while (p != NULL);
    head->next = NULL;
    return 0;
}

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

从循环中出来时,p已经是NULL,所以head—>next会出错,出掉即可,前面就已经实现了清空链表。一点拙见,勿喷

  写反了,应该

free(p->data);
p->data = NULL;

你这个问题根本就是链表都是空的,从你删除的代码来看,free都是错的,因此就算是循环出来head的next都还没被删除的,因此对head next赋值是不会出错的。所以你的链表本来就是空的。