我做了一个实现双向链表的类并重载了一个比较 运算符(operator)。我创建了一个临时节点来循环访问链接列表并在完成后将其删除。每当我返回错误陈述时,我都会遇到读取访问冲突。 我已经坚持了几个小时。任何帮助都会很棒。
bool operator== (const dlist& a, const dlist& b)
{
if (a.size() != b.size())
return false;
bool equal = true;
int index = 0;
dlist::node* temp = new dlist::node;
temp = a.head();
dlist::node* temp1 = new dlist::node;
temp1 = b.head();
while (index < a.size()) {
if (temp->value == temp1->value)
index++;
else {
equal = false;
break;
}
temp = temp->next;
temp1 = temp1->next;
}
delete temp, temp1;
return equal;
}
最佳答案
在这部分代码中
dlist::node* temp = new dlist::node;
temp = a.head();
dlist::node* temp1 = new dlist::node;
temp1 = b.head();
您创建并立即泄漏了两个对象。
不需要带有 new
的两行。
如果删除它们,就不会再泄漏,否则您将拥有相同的功能。
然后很明显,这种删除临时工的尝试
delete temp, temp1;
是不需要的,因为它们都是本地指针,但不指向任何本地实例化的东西。它们只是指向列表中不可删除的元素。 (考虑到逗号运算符的工作方式,我认为这种删除两个指针的方式行不通。)
关于c++ - 当我通过删除临时节点来释放内存时,我遇到了读取访问冲突。但只有当我返回虚假陈述时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46483020/