Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将节点附加到链表时出现SEGFULT 我一直试图用C++来重写一些基本的数据结构来刷新我的OOP的一些基础知识,但是我已经遇到了一个愚蠢的问题。_C++_Segmentation Fault_Singly Linked List - Fatal编程技术网

将节点附加到链表时出现SEGFULT 我一直试图用C++来重写一些基本的数据结构来刷新我的OOP的一些基础知识,但是我已经遇到了一个愚蠢的问题。

将节点附加到链表时出现SEGFULT 我一直试图用C++来重写一些基本的数据结构来刷新我的OOP的一些基础知识,但是我已经遇到了一个愚蠢的问题。,c++,segmentation-fault,singly-linked-list,C++,Segmentation Fault,Singly Linked List,我试图构建一个单链接列表,将字符串“Hello”和“World”附加到列表中,然后查看列表中的所有内容。这是一项非常简单的任务,但在运行以下代码时,我遇到了分段错误: driver.cc 我是不是太有远见了?这太傻了。对不起,如果它太基本了,所以 谢谢, erip你的Append中的while循环以temp为空指针结束,因此没有temp->setNext()你的Append中的while循环以temp为空指针结束,因此没有temp->setNext() 这是因为当temp==nullptr时,您

我试图构建一个单链接列表,将字符串“Hello”和“World”附加到列表中,然后查看列表中的所有内容。这是一项非常简单的任务,但在运行以下代码时,我遇到了分段错误:

driver.cc

我是不是太有远见了?这太傻了。对不起,如果它太基本了,所以

谢谢,
erip

你的
Append
中的while循环以
temp
为空指针结束,因此没有
temp->setNext()

你的
Append
中的while循环以
temp
为空指针结束,因此没有
temp->setNext()

这是因为当
temp==nullptr
时,您正在打破
while
循环

使用:

这是因为当
temp==nullptr
时,您正在打破
while
循环

使用:


应该是
while(temp->getNext())
while(temp!=nullptr)
更改为
while(temp->getNext()!=nullptr)
Tunnel vision。很傻。谢谢,所有的.都应该是
while(temp->getNext())
while(temp!=nullptr)
改成
while(temp->getNext()!=nullptr)
隧道视觉。很傻。谢谢大家。
#include <iostream>
#include <string>
#include "SinglyLinkedList.h"

int main() 
{
    SLL<std::string> List;
    List.Append("Hello");
    List.Append("World");

    List.visitAll(std::cout);

    return 0;
}
#ifndef NODE_H
#define NODE_H

template <class T>
class Node {
    public:
        Node<T>() {} 
        Node<T>(T init) { data = init; next = nullptr; }

        void setData(T newData) { data = newData; }
        void setNext(Node<T> *nextNode) { next = nextNode; }

        const T getData() { return data; }
        Node<T> *getNext() { return next; }
    private:
        T data;
        Node<T> *next;
};

#endif
#ifndef SINGLY_LINKEDLIST_H
#define SINGLY_LINKEDLIST_H

#include "Node.h"
#include <iostream>

template <class T>
class SLL {
    public:
        SLL<T>() { head = nullptr; size = 0; }
        ~SLL<T>() {}
        void Append(T added);
        void Delete(T deleted);
        void visitAll(std::ostream &outs);
    private:
        Node<T> *head;
        long size;
};

template <class T>
void SLL<T>::Append(T added) 
{
    Node<T> *newNode = new Node<T>(added);

    Node<T> *temp = head;

    if(temp != nullptr) {
        while(temp != nullptr) {
            temp = temp->getNext();
        }

        temp->setNext(newNode); // seg fault here
    } 
    else {
        head = newNode;
    }
}

template <class T>
void SLL<T>::visitAll(std::ostream &outs)
{
    Node<T> *temp = head;

    while(temp)
    {
        outs << temp->getData() << std::endl;
        temp=temp->getNext();
    }
}

#endif
Hello
World
while(temp != nullptr) {
    temp = temp->getNext();
}

temp->setNext(newNode); // seg fault here
while(temp->getNext() != nullptr) {
    temp = temp->getNext();
}

temp->setNext(newNode);