如何delete一个单链表?链表的元素是我自定义类的对象。

来源:百度知道 编辑:UC知道 时间:2024/05/27 20:07:14
节点定义如下。
class LNode{
MyClass data;
LNode *next;
}
MyClass是自定义的类,里面有构造函数和析构函数。
现在我想用delete销毁单链表L(L有头节点)。
于是我写道:
LNode p;
p=L;
while (p)
{
p=L->next;
delete L;
L=p;
}
这样编译通过,运行时出错:
Microsoft Visual C++ Debug Library
Debug Assertion Failed!
Program: ....
File: ...
Line: ....
Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
调试了一下,发现这个错误是在执行delete那一句的时候发生的。
而且在delete那一句按f11键立刻就会跳出这个错误,没有跟进其他程序。
请问:1.为什么会出错?
2. 如何用delete安全地释放一个链表?
3. 用delete释放链表的时候,怎样让它自动释放每个节点的每个成员(若该成员有析构函数则执行该析构函数)?
高手作答!万分感激!

LNode p;
p=L;
while (p)
{
p=L->next;
delete L;
L=p;
}
这个也有问题,你已经delete L了,下面又继续使用L->next?这个不非法吗?修改成这样:

LNode p,s;
p=L;
while(p->next)
{
s=p->next;
p->next=s->next;//删除第二个节点
delete s;
}
delte p; //删除首节点

你把全部代码发上来,我怀疑你申请的时候用的是malloc

如果是malloc就free

如果是正常的连表
就直接用指针指到下下一个位置就可以了
可以用两个指针,第1个用来指向下一个
而第二个用来保存当前的位置就可以了

答案:整个城市笼罩在阴湿的雨裏.