我有循环链表,我在调用析构函数时遇到问题。
这是列表的结构:
struct LList {
LList(const string & name) : Next(NULL), Name(name) {
}
LList * Next;
string Name;
};
这是我的代码:
~Class (){
LList * tmp1= First;
LList * tmp2;
while(tmp1){
tmp2=tmp1->Next;
delete tmp1;
tmp1=tmp2;
}
}
我尝试使用valgrind,但我不确定其结果。谁能告诉我我做错了什么?
问题是主要功能结束后的段错误。 Valgrind说无效读取大小,报告100000多个错误。
答案 0 :(得分:1)
如果列表是循环的,那么析构函数将是你编码它的无限循环(或俄语轮盘赌)。
应该有点像:
~Class() {
// break the circle
LList cur = First;
Llist nxt = head->Next;
if (nxt) cur->Next = 0;
cur = nxt;
// walk through the list and delete nodes
while (cur) {
nxt = cur->Next;
delete cur;
cur = nxt;
}
}
答案 1 :(得分:0)
我认为你想要在你的析构函数中添加的是:
delete Next;
你目前所做的是错误的,因为: