【问题标题】:Segmentation Fault in C++: sorted linked listC++ 中的分段错误:排序的链表
【发布时间】:2021-08-18 11:01:37
【问题描述】:

我正在编写一个函数来在 C++ 中的排序链表中插入一个数字。但是,当我运行它时,我得到了“分段错误”。谁能解释一下为什么会这样?

    Node * insertInSorted(Node * head, int data)
{
    Node * curr = head;
    Node * a = new Node(data);
    
    while(curr->next->data < a->data || curr->next != NULL)
    {
        curr = curr->next;
    }
    
    Node * temp = curr->next;
    
    curr->next = a;
    a->next = temp;
    
    return head;
}

【问题讨论】:

  • curr-&gt;next != NULL*为时已晚。了解如何使用调试器What is a debugger and how can it help me diagnose problems?
  • 为了扩展@SM 的答案,您在检查next 是否有效之前访问data 的属性data。因此,在列表的末尾,您正在访问一个 NULL 指针,这会导致段错误。只需切换条件,问题就会消失(由于短路条件)
  • 您好,感谢您的评论。我尝试按照您的建议进行操作,但仍然出现 Seg Fault。
  • 嗯,这只是最明显的错误。您如何通过您选择的调试器运行源文件并告诉我们段错误实际发生在哪里?如果您仔细观察所涉及的变量,您可能已经自己找出问题所在。作为一个额外的提示,您可能需要确保“curr”在循环结束时不会最终成为“NULL”。

标签: c++ function pointers linked-list segmentation-fault


【解决方案1】:

while(curr-&gt;next-&gt;data &lt; a-&gt;data || curr-&gt;next != NULL)

这显然是错误的。你想要的条件是:

while(curr-&gt;next != NULL &amp;&amp; curr-&gt;next-&gt;data &lt; a-&gt;data)

  1. 下一个节点必须存在并且
  2. data 必须小于您插入的 data

该功能仍然无法正常工作(您永远不会在 head 之前插入任何内容,即使应该在此处插入),但至少您的崩溃应该消失了。

【讨论】:

    猜你喜欢
    • 2015-03-24
    • 2021-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-21
    • 2012-06-12
    • 2020-09-10
    相关资源
    最近更新 更多