listnode循环,分段错误

时间:2017-04-30 15:37:43

标签: c++ linked-list

未设法找到此问题的简化版本。

我是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循环就会中断。

1 个答案:

答案 0 :(得分:0)

这样想。在while循环的特定迭代中,temp1指向一个地址,temp1->next指向NULLtemp3指向地址,temp3->next也指向地址。

temp1 == address

temp1->next == NULL

temp3 == address

temp3->next == NULL

您遍历当前地址,打印temp1temp3的数据。然后你将它们设置为等于它们的下一个指针。现在temp1指向NULLtemp3指向地址。

while循环的条件检查其中一个指针是否指向NULL。由于temp3未指向NULL,因此会尝试打印temp1temp3的数据。但这会导致问题,因为temp1指向NULL,并且您尝试取消引用NULL指针,这将导致分段错误。

要解决此问题,您应该为while循环使用AND(&amp;&amp ;;)条件,以便仅在temp1temp3不指向{{时打印1}}。