分段错误(C ++指针)

问题描述 投票:0回答:1

我正在尝试使用节点类和指向下一个节点的指针在C ++中实现链接列表类。

template<class T>
class Node {
    public: T val;
    public: Node* next;
    public: Node() { }
    public: Node(T val) { this.val = val; } 
};

我创建了一个链接列表类,它具有指向头部的指针和一个附加函数以将节点添加到列表中:

template<class T>
class LinkedList {
   private: Node<T>* head;

   public: LinkedList() { }
   public: LinkedList(T val) { head -> val = val; }

   public: void append(T val) {
       Node<T>* temp = head;
       while(temp -> val != NULL) {
           temp = temp -> next;
       }
       temp -> val = val;
   }
};

但是在编译和运行后,它将引发此错误“分段错误(内核已转储)”

我对分段错误有点了解,例如尝试访问不再存在的内存位置,但是在此示例中我没有得到它,没有任何帮助吗?

c++ pointers memory-management
1个回答
0
投票

主要问题是您没有使用空指针初始化下一个指针,但是您假设它是空指针。解决方法如下:

template <class T>
class Node {
 public:
  T val;
  Node* next;
  Node(T val_ = T{})
    : val{val_}
    , next{nullptr}
  { }
};
© www.soinside.com 2019 - 2024. All rights reserved.