c++ - 当我通过删除临时节点来释放内存时,我遇到了读取访问冲突。但只有当我返回虚假陈述时

标签 c++ pointers memory-management

我做了一个实现双向链表的类并重载了一个比较 运算符(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/

相关文章:

c++ - 什么是段错误?我该如何解决?

cocoa - 如何避免该函数中的内存泄漏?

c++ - 使用带有 vector 作为成员变量的类的boost内存池

c++ - boost 错误信息

c - 如何在 C 中释放一些动态分配的嵌套结构数组?

c++ - 乒乓物理题

c++ - 表达式 *(int*)a 是什么意思?

c - 在 C 中将字符与表指针交换

iphone - 自动 C++ 内存/对象实例管理?智能指针?

c# text/winForm 覆盖 xfire、PIX、steam、fraps 等视频游戏