出现这个问题一般是内存申请不够,释放内存时出现错误;示例:
int main()
{
...........
i = ListEmpty(L);
printf("L是否为空:i = %d(1:是 0:否)\n", i);
ClearList(L);-- DAMAGE:after Normal block(#xx)
printf("清空L后: L = ");
............
}
void ClearList(LinkList L) // 不改变L
{ // 初始条件:线性表L已存在。操作结果:将L重置为空表
LinkList p, q;
p = L->next; // p指向第一个结点
while(p)
// 没到表尾{
q = p->next;
free(p);-- 释放内存时溢出
p = q;
}
L->next = NULL; // 头结点指针域为空
}
tatus ListDelete(LinkList L, int i, ElemType &e)
{ // 在带有头结点的单链线性表L中,删除第i个元素,并由e返回其值
int j = 0;
LinkList p = L, q;
while(p->next && j<i-1) // 寻找第i个结点,并令p指向其前驱
{
p = p->next;
j++;
}
if(!p->next || j>i-1) // 删除位置不合理
return ERROR;
q = p->next;// 删除并释放结点
p->next = q->next;
e = q->data;
s = (LinkList)malloc(sizeof(ElemType));// 此处正确的是sizeof(LNode),大意写成sizeof(ElemType)
// 开辟内存不够,导致释放内存错误!!!
return OK;
}