【发布时间】: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->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