【问题标题】:Segmentation fault - Linked list implementation分段错误 - 链表实现
【发布时间】:2019-02-04 15:54:35
【问题描述】:

我的代码中出现了用于实现链表的分段错误。任何帮助表示赞赏。谢谢。我在这里特意添加了结构方法。

struct node{
    int data;
    node *next;

    node(int data){
        this->data = data;
        this->next = NULL;
    }

    node(int data, node *next){
        this->data = data;
        this->next = next;
    }
    int getData(){
        return data;
    }
    node* getNextNode(){
        return next;
    }
};

class LinkedList {
    private: 
        node *head,*tail;
    public:
        linked_list(){
            head=NULL;
            tail=NULL;
        }
        void addNode(int data){
            node *temp = new node(data);
            if(head==NULL){
                head = temp;
                tail = temp;
            }
            else {
                tail->next = temp;
                tail = temp;
            }
        }
        void display(){
            node *temp;
            temp = head;
            cout<<"PRINTING LINKED LIST"<<endl; 
            while(temp!=NULL){
                cout<<temp->getData()<<" ";
                temp = temp->getNextNode();
            }
        }

};

当我调用以下代码时出现分段错误:

LinkedList myLinkedList;
myLinkedList.addNode(1);
myLinkedList.addNode(2);
myLinkedList.display();

堆栈溢出要求提供更多详细信息,以便我发布此问题。胡言乱语,请忽略以下部分: 儿童歌曲《Humpty Dumpty》的歌词:Humpty Dumpty 坐在墙上,Humpty Dumpty 摔倒了所有国王的马和所有国王的人。

【问题讨论】:

  • 我对 SO 问题的印象是,如果它没有段错误,那么它就不是链表。你的问题是什么?你用过调试器吗?
  • 顺便说一句,当 SO 要求您提供详细信息时,它并不是在询问儿童歌曲的详细信息...
  • 我认为最后一点的答案是“是的,先生。是的,先生。三个袋子满了。”
  • 其实你对儿歌的品味并不高。这是一个更好的:) : youtube.com/watch?v=Mx8s6ZACZFU
  • 但是感谢@AntoineMorrier 的推荐,希望我不需要它:)

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


【解决方案1】:

问题来了

class LinkedList {
    private: 
        node *head,*tail;
    public:
        linked_list() {
            head=NULL;
            tail=NULL;
        }

linked_list 不是LinkedList 的构造函数,因为拼写不同。明明应该是这样的

class LinkedList {
    private: 
        node *head,*tail;
    public:
        LinkedList() {
            head=NULL;
            tail=NULL;
        }

现在您发布的代码不应该编译,或者至少它应该产生编译器警告消息。始终注意编译器的警告消息。

【讨论】:

  • 天哪!谢谢。顺便说一句,我的编译器没有抛出任何警告/错误消息。不过应该有!
  • @DhruvRatanGupta 我很惊讶,但也许您需要使用一些标志来启用警告消息。
  • 这真的有问题吗?我认为编译器应该为LinkedList 类生成隐式默认构造函数,它应该将两个成员都初始化为NULL。如果有的话,我希望在声明没有返回类型的函数时出现编译器错误...
  • @Yksisarvinen 默认构造函数将保留未初始化的指针。但是是的,我同意我预计会出现编译器错误,但 OP 说他甚至没有收到警告。
猜你喜欢
  • 2012-06-10
  • 1970-01-01
  • 2020-01-26
  • 1970-01-01
  • 2013-10-05
  • 2020-09-30
  • 2013-10-05
  • 2021-01-17
  • 1970-01-01
相关资源
最近更新 更多