现在的位置: 首页 > 综合 > 正文

DAMAGE:after Normal block(#xx) 数据结构(严蔚敏)–线性链表

2018年05月19日 ⁄ 综合 ⁄ 共 688字 ⁄ 字号 评论关闭

出现这个问题一般是内存申请不够,释放内存时出现错误;示例:

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;

}

抱歉!评论已关闭.