【问题标题】:Linked List with C++ and generic template giving segmentation fault error.带有 C++ 和通用模板的链表给出分段错误错误。
【发布时间】:2018-04-02 21:11:03
【问题描述】:

我为通用链表编写了这段代码:

#include <iostream>
#include <stdio.h>


template <class T> 
struct Node{ 
    T data; 
    Node<T> *next; 
};


template <class T> 
class LinkedList{ 


    Node<T>* head; 
    int size; 

    public: 

        LinkedList<T>() {

            size = 0;
            head = NULL;
        }


        void ll_push(T data){ 
            Node<T>* new_node; 
            new_node->data = data; 
            new_node->next = head; 
            head = new_node; 
            size ++; 
        }

        int ll_size(){ 
            return size; 
        }

        void ll_print_int(){
            Node<T> *start = head; 
            while (start != NULL){ 
                cout<< start->data;
                start = start->next;
                cout<< ","; 
            }
        }


};



int main(){ 

    LinkedList<int> ll;

    for(int i = 0; i < 10; i++){ 
        ll.ll_push(i);
    }

    ll.ll_print_int();

    return 0;
}

但每当我尝试执行 ll_print 时,都会收到分段错误错误。我想我可能会在某些时候滥用指针,但我不确定。我仍然是 C++ 的新手,所以如果有人能解释我做错了什么,我将不胜感激。

【问题讨论】:

  • 谢谢,但这并不能解决问题
  • 任何自尊的编译器都会因为这个常见的编程错误而发出诊断消息,并且很可能您的编译器这样做了,但是您忽略它,因为它确实生成了一个已编译的程序。好吧,您刚刚学到了非常宝贵的一课:即使编译器成功生成了编译程序,也不要忽略来自编译器的警告和其他诊断消息。你的编译器对你咆哮是有原因的,并不是因为你的编译器喜欢生成长而令人困惑的消息。
  • @Robot0110 我还是个 C++ 新手 -- 但是你正在尝试编写一个只有中高级程序员才能编写的程序 正确,即使是中级程序员也可能会错过一些重要的细节。
  • 它没有解决它,因为显示的代码不是真实代码,而是幻想代码。它无法编译,因为显示的代码缺少一些明显的语句。它指的是cout,但看不到using namespace std;。除此之外,谁知道还有哪些实际代码被遗漏了,并且没有显示出来。它可能还有其他常见的错误,但由于没有显示真实的代码,因此无法给出真正的答案。

标签: c++ class templates linked-list


【解决方案1】:

但每当我尝试执行 ll_print 时,都会收到分段错误错误。

您在这里使用的是未初始化的指针:

Node<T>* new_node;       // unintialized pointer.
new_node->data = data;

你很可能想要:

Node<T>* new_node = new Node<T>;
new_node = ...

【讨论】:

  • 感谢您的回复,但这并不能解决问题。
  • @Robot0110 是的,它确实。你重建你的程序了吗?
  • 它没有解决它,因为问题中显示的代码不是真实代码,而是幻想代码,因为它无法编译,由于一个明显的错误。谁知道原始代码实际上读的是什么。它可能还有其他类似的错误。
  • 这是完整的代码。并且错误地忽略了 cout 的名称 state。对不起!谢谢,我重建了我的代码,它现在可以工作了。
猜你喜欢
  • 2021-07-10
  • 2021-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-11
  • 2018-05-07
  • 2016-03-19
相关资源
最近更新 更多