发布网友 发布时间:2022-04-24 12:25
共3个回答
热心网友 时间:2023-10-12 19:20
如果p=NULL时,你用free释放是不会成功的
在你的程序中你最后使得free(q)中的q恰好就是NULL,所以释放失败
原因在于Delete函数中的
else
{
while(j < i-1&&p != NULL)
{
p = p->pNext;
j++;
}
if(j >= i||p ==NULL)
{ exit(-1); return; }
q = p->pNext;
p->pNext = p->pNext->pNext;
*e = q->data;
free(q);
当j不再小于i-1即恰好j ==i -1时循环结束(要记住在循环体里面还有个j++),此时的p不会等于NULL,但是p->Next==NULL,所以后面的if条件不成立,就进入了后面的q = p->pNext; 此时释放q必然是失败的。
热心网友 时间:2023-10-12 19:21
本身没错,你的程序如果删除大于4个结点链表也没问题,
问题是小于4个结点时,p->next有可能是0,你的p->pNext = p->pNext->pNext就出错了。
热心网友 时间:2023-10-12 19:21
该为下述代码再看看,原来代码显得“乱”。
void Delete(PNODE pHead, int i,int *e) {