【发布时间】:2016-08-19 16:19:10
【问题描述】:
我试图在列表中找到循环开始的节点。 返回的结果是正确的。 但是,一个错误指出 * ./solution 中的错误:双重释放或损坏(fasttop):0x0000000000b3e030
显示中止。我看到了一些其他类似的问题,我认为问题出在temp1=temp;。但我不知道如何解决这个问题。
如何纠正?还有为什么会出现这个错误?
ListNode* Solution::detectCycle(ListNode* A) {
ListNode* temp = A;
ListNode* temp1 = A;
while(temp->next!=NULL && temp->next->next!=A->next ){
temp1 = temp;
temp = temp->next;
temp1->next=A->next;
}
if(temp->next==NULL) {
temp->val=-1;
delete temp1;
return temp;
}
else {
temp= temp->next;
delete temp1;
return temp;
}
}
谢谢。
【问题讨论】:
-
如果你试图在你的列表中找到一个循环,那么为什么在第一个循环中你会踩到你的列表?
-
听起来您可能需要学习如何使用调试器来逐句执行代码。使用好的调试器,您可以逐行执行程序并查看变量的值并监控它与您期望的偏差。如果您要进行任何编程,这是必不可少的工具。
-
看来你的循环逻辑坏了。例如,当 A->next == A 时会发生什么? temp1->next = A->next 也很奇怪。如果循环中断了 1000 个节点怎么办,为什么会涉及 A->next?
-
别猜了。使用调试器,单步调试代码并找出答案。这是编程的一部分,是必须学习的技能。
-
“我的代码编译”并不神奇地意味着它没有问题。它只是没有任何编译器可以发现
标签: c++ pointers memory-leaks