【问题标题】:listnode loop, segmentation faultlistnode 循环,分段错误
【发布时间】:2017-04-30 15:37:42
【问题描述】:

没有找到这个问题的简化版本。

我是 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;    
}

除了在 cmets 之间之外,一切都运行。

我的想法是我可以遍历到 listnode (temp1) 的末尾,然后一旦我到达末尾,我就指向头部并根据需要多次遍历它。不过我遇到了分段错误。

我不能很好地遍历 temp2,但是当多次遍历 temp1 时我做错了什么?我可以只引用一次列表的头部吗?

编辑:我发现我刚刚留下了一个条件。现在它是我的第三个列表,它给了我分段错误。它将运行一个循环,但一旦退出 while 循环,它就会中断。

【问题讨论】:

  • ||条件应该是 &&。

标签: c++ linked-list


【解决方案1】:

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

temp1 == address

temp1->next == NULL

temp3 == address

temp3->next == NULL

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

您的 while 循环条件检查是否有任何一个指针不指向 NULL。因为temp3 不指向NULL,它会尝试打印出temp1temp3 的数据。但这会导致问题,因为temp1 指向NULL,而您试图取消引用NULL 指针,这将导致分段错误。

要解决此问题,您应该对 while 循环使用 AND (&&) 条件,以便它仅在 temp1 AND temp3 不指向 NULL 时打印。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-01
    • 1970-01-01
    • 2013-08-21
    • 1970-01-01
    • 1970-01-01
    • 2016-07-27
    • 2015-11-26
    • 1970-01-01
    相关资源
    最近更新 更多