如何解决分段错误单链表?

Posted

技术标签:

【中文标题】如何解决分段错误单链表?【英文标题】:How to resolve segmentation fault singly linked list? 【发布时间】:2021-11-02 02:57:21 【问题描述】:

编辑:刚刚尝试做while (temp != NULL && newNode->info > temp->info),但由于某种原因仍然无法正常工作,我尝试输入 5 和 4 并再次出现分段错误

对不起,我对这个有点陌生,我正在尝试制作一个排序的单链表。我不确定它有什么问题,如果有人可以帮助我解决这个问题,我将不胜感激?

我可能输入了几个值,但由于某种原因每次输入不同数量的值(不是因为我输入了 -1)。然后它只是说“发生异常。分段错误。”在这个特定的行上,我不知道为什么,因为我小心地比较值而不是内存地址:

while (newNode->info > temp->info)

完整代码:

#include <iostream>
using namespace std;

class node 
public:
    int info;
    node *next;

    node (int data, node *ptr = 0) 
        info = data;
        next = ptr;
    
;

class osll

    public:
    node *head, *tail;

    osll()
        head = tail = 0;
    

    bool isEmpty()
        return head == 0;
    

    void sort(int input)

        node *newNode = new node (input);

        if (isEmpty())
            newNode ->next = head;
            head = newNode;
            if (tail == 0)
                tail = head;
        
        if (newNode ->info > head ->info)

            node *temp = head;
            while (newNode->info > temp->info)
                temp = temp ->next;
            
            
            // will figure out how to link newNode to 
            // whatever temp value that stops here
            // once this error goes away
        
    

    
;



int main () 
    osll l;
    int input = 0;

    while (input != -1) 
        cout << "Enter a value: ";
        cin >> input;
        l.sort(input);
    

    return 0;


【问题讨论】:

如果temp 变成空指针,你的while循环会发生什么? 您输入的是什么值?我刚刚输入了大量的随机数,从未引起过段错误。 您是否尝试先搜索互联网?我相信我在上周看到了相同的问题标题。 在while循环中检查temp != NULL 看来,如果我继续以递减的方式添加值,它仍然有效,但直到增加它似乎不起作用,所以 5 4 3 2 1 有效,但 5 4 3 88 返回了分段故障信息 【参考方案1】:

如果您的新数字是列表中最大的数字,则会导致分段错误,因为您没有在 while 循环中检查是否到达列表末尾。在最后一个元素 temp 之后将为空,因此 .temp-&gt;info 将导致分段错误。

所以你应该做例如(第 40 行)

while (temp != null && newNode->info > temp->info)

【讨论】:

刚试过输入3和5还是不行,不知道为什么 我只修复了段错误。我没有完成代码,所以它没有链接,但你不再得到一个段错误。如果这样做,请确保在运行之前保存并重新编译代码(容易忘记)。 @minhanhb 永远不要假设您只有一个错误。如果newNode -&gt;info &gt; head -&gt;info 不正确,代码似乎也会丢弃节点。 它一直在丢弃。它无处链接。但万一 3 5 newNode -&gt;info &gt; head -&gt;info 为真

以上是关于如何解决分段错误单链表?的主要内容,如果未能解决你的问题,请参考以下文章

如何解决列表和文件的“C”中的“分段错误”错误

如何解决C ++的分段错误错误

我使用 fread 在 BMP 上读取分段错误信息头。请问我该如何解决?

单链表的逆置使用递归算法出现-842150451这个值,请求高手予以解决。。

如何解决错误:我的代码中出现分段错误(核心转储)? AT&T 语法

如何使用C++实现单链表