抱歉避开你们
我在循环链表中遇到反向函数问题。
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)
如何处理?
答案 0 :(得分:0)
这是来自Visual Studio试图帮助您(并成功,IMO)。
正如Mark Ingraham很久以前在another answer中指出的那样,当您释放堆内存块时,Visual Studio的运行时库将使用0xDDDDDDDD填充数据块。
所以,虽然你没有显示任何从你的列表中删除的代码,但是如果有这样的代码,那可能是第一个看的地方 - 至少乍一看,看起来很有可能当你尝试从列表中删除一个节点,你要删除该节点所在的内存,但仍然留下一个指向该已删除内存的指针。
也可能(但不太可能,IMO)你只是在没有初始化的情况下使用内存 - 而你碰巧遇到了之前分配的内存块,然后将其释放回堆管理器。
然而,最重要的是,不“处理”访问冲突。相反,您需要在代码中找到导致访问冲突发生的错误,并修复它以便不再发生。