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;
}
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!
从循环中出来时,p已经是NULL,所以head—>next会出错,出掉即可,前面就已经实现了清空链表。一点拙见,勿喷
写反了,应该
free(p->data);
p->data = NULL;
你这个问题根本就是链表都是空的,从你删除的代码来看,free都是错的,因此就算是循环出来head的next都还没被删除的,因此对head next赋值是不会出错的。所以你的链表本来就是空的。