如何处理读取访问冲突?

时间:2018-03-10 15:34:11

标签: visual-c++

抱歉避开你们

我在循环链表中遇到反向函数问题。

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句话中

问题出现在current = current-&gt; next;

(异常抛出:读取访问冲突, 当前是0xDDDDDDDD)

如何处理?

1 个答案:

答案 0 :(得分:0)

这是来自Visual Studio试图帮助您(并成功,IMO)。

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

所以,虽然你没有显示任何从你的列表中删除的代码,但是如果有这样的代码,那可能是第一个看的地方 - 至少乍一看,看起来很有可能当你尝试从列表中删除一个节点,你要删除该节点所在的内存,但仍然留下一个指向该已删除内存的指针。

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

然而,最重要的是,“处理”访问冲突。相反,您需要在代码中找到导致访问冲突发生的错误,并修复它以便不再发生。