未设法找到此问题的简化版本。
我是listnodes的新手,所以我可能只是听不懂简单的东西。在我通过for循环之前,一切似乎都有效。
while(temp2 != NULL){
for(int i = temp2->data; i > 0; i--){
//////////////
temp1 = head;
temp3 = Product.head;
while(temp1 != NULL || temp3 != NULL){
cout << "\ntemp1->data: " << temp1->data;
cout << "\ntemp3->data: " << temp3->data;
temp1 = temp1->next;
temp3 = temp3->next;
}
/////////////
cout << "\n\ndecrement: " << i;
}
temp2 = temp2->next;
}
除了评论之外,一切都在运行。
我的想法是我可以遍历listnode(temp1)的末尾,然后一旦我到达终点,我会指回头部并根据需要遍历它。我在那里遇到了分段错误。
我无法穿越temp2就好了,虽然在多次遍历temp1时我做错了什么?我可以只引用一次列表的头部吗?
编辑:我发现我刚刚离开了一个条件。现在它是我的第三个列表给了我分段错误。它将运行一个循环,但一旦退出while循环就会中断。
答案 0 :(得分:0)
这样想。在while循环的特定迭代中,temp1
指向一个地址,temp1->next
指向NULL
。 temp3
指向地址,temp3->next
也指向地址。
temp1 == address
temp1->next == NULL
temp3 == address
temp3->next == NULL
您遍历当前地址,打印temp1
和temp3
的数据。然后你将它们设置为等于它们的下一个指针。现在temp1
指向NULL
,temp3
指向地址。
while循环的条件检查其中一个指针是否指向NULL
。由于temp3
未指向NULL
,因此会尝试打印temp1
和temp3
的数据。但这会导致问题,因为temp1
指向NULL
,并且您尝试取消引用NULL
指针,这将导致分段错误。
要解决此问题,您应该为while循环使用AND(&amp;&amp ;;)条件,以便仅在temp1
和temp3
不指向{{时打印1}}。