C ++单链表分割错误

时间:2018-12-13 11:04:50

标签: c++ singly-linked-list

我正在尝试编写一个使单个链接列表成为一个代码。我想将所有数组元素放入每个节点并进行链接。但是,当我运行代码时,我不断收到分段错误错误。我不明白为什么我得到这个错误。 有人可以帮忙吗?谢谢!

linked_list_main.cc

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

int main() {
    int array[5];
    List<int> list(array, 5);
    std::cout << list;
    return 0;

} 
  
template <class T>                                                                                    
class Node {                                                                                    
    public:                                                                           
          T data;                                                                                       
          Node<T>* next;                                                                                                                                                                                    
};
这是我的linked_list.h文件。

                                                                                                                                                                       
class List {                                                                                          
    private:                                                                                          
        Node<T> *head;                                                                                
    public:                                                                                           
        List() : head(NULL) {};                                                                       
        ~List() {                                                                                     
            Node<T>* ptr;                                                                             
            for(ptr = head; ptr == NULL; ptr = head->next)                                            
                delete ptr;                                                                           
            }                                                                                             
        List(T* arr, int n_nodes){                                                                    
            Node<T>* tmp = head;                                                                      
                for(int i = 0; i < n_nodes; i++ ) {                                                       
                    Node<T>* node = new Node<T>;                                                          
                    node->data = arr[i];                                                                  
                        if(tmp != NULL) {                                                                     
                            node->next = tmp;                                                                 
                            tmp = node;                                                                       
                        }                                                                                     
                  }                                                                                         
        }                                                                                             
                                                                                                                                                      
        friend std::ostream& operator<<(std::ostream& out, List<T>& rhs) {                              
            Node<T>* cur = rhs.head;                                                                                                                                                                     
            while(cur != NULL) {                                                                                                                                                                            
                if(cur->next == NULL)                                                                                                                                                                        
                    out << cur->data << " ";                                                                                                                                                                
                else                                                                                                                                                                                        
                    out << cur->data << ", ";                                                                                                                                                                 
                cur = cur->next;                                                                                                                                                                               
            }                                                                                         
        }                                                                                             
};

1 个答案:

答案 0 :(得分:2)

您需要更改此

List(T* arr, int n_nodes){
    Node<T>* tmp = head;
    ...
}

对此

List(T* arr, int n_nodes){
    Node<T>* tmp = NULL;
    ...
    head = tmp;
}

指针很棘手,学习使用调试器。这将是您学习编程的最佳时间。