代码之家  ›  专栏  ›  技术社区  ›  임도경

如何处理读访问冲突?

  •  -1
  • 임도경  · 技术社区  · 7 年前

    很抱歉避开你们

    循环链表中的反向函数有问题。

    void reverse() {
        int num = many;
        node* current = head;
        node* previous = 0;
        while (num != 0) {
            cout << "1" << '\t';
            node* r = previous;
            previous = current;
            current = current->next;
            previous->next = r;
            num--;
        }
        head = previous;
    }
    

    在本函数中,在2 while语句之后

    问题出现在电流=电流->下一个

    (异常引发:读访问冲突, 电流为0xDDDDDDDD)

    如何处理??

    1 回复  |  直到 7 年前
        1
  •  0
  •   Jerry Coffin    7 年前

    这是Visual Studio的一篇文章,它试图帮助您(而且成功了,IMO)。

    正如Mark Ingraham在 another answer 很久以前,当您释放一块堆内存时,Visual Studio的运行时库将用0xDDDDDDDD填充一块数据。

    因此,虽然您没有显示任何正在从列表中删除的代码,但如果有这样的代码,那可能是第一个要查看的地方——至少乍一看,似乎很有可能当您尝试从列表中删除节点时,您正在删除节点所在的内存,但仍然会留下一个指向该已删除内存的指针。

    也有可能(但不太可能,IMO)您只是在使用内存,而没有对其进行初始化,并且碰巧遇到了之前分配的内存块,然后将其释放回堆管理器。

    然而,底线是你 不要 “处理”访问冲突。相反,您需要在代码中找到导致访问冲突发生的bug,并对其进行修复,使其不再发生。