C++ 使用函数在LinkedList中获取输入,但在打印时给出分段错误

C++ 使用函数在LinkedList中获取输入,但在打印时给出分段错误,c++,function,linked-list,runtime-error,C++,Function,Linked List,Runtime Error,这是一个循环双链接列表,但在运行程序时出现运行时错误分段错误。函数的用途是获取输入直到用户给出-1,打印函数打印直到cur->next==head。请告诉我我做错了什么,这样我以后就不会这么做了。谢谢 #include<iostream> using namespace std; template<class T> class CDNode{ public: T data; CDNode* next; CDNode* prev; CDN

这是一个循环双链接列表,但在运行程序时出现运行时错误分段错误。函数的用途是获取输入直到用户给出-1,打印函数打印直到cur->next==head。请告诉我我做错了什么,这样我以后就不会这么做了。谢谢

#include<iostream>
using namespace std;

template<class T>
class CDNode{
public:
    T data;
    CDNode* next;
    CDNode* prev;

    CDNode(T x){
       data = x;
       next = nullptr;
       prev = nullptr;
    }
};

template<typename T>
CDNode<T>* takeInput(){
    cout<<"Enter the elements of the list"<<endl;
    T data;
    cin>>data;
    CDNode<T> *head = nullptr;
    CDNode<T> *tail = nullptr;

    while(data != -1){
        CDNode<T> *newNode = new CDNode<T>(data);
        if(head == nullptr){
            head = newNode;
            tail = newNode;
        }else{
            tail->next = newNode;
            newNode->prev = tail;
            tail = tail->next;
        }
        cin>>data;
    }
    return head;
    }

template<typename T>
void print(CDNode<T> *head,CDNode<T> *cur){
    if(cur->next == head){
      cout<<cur->data<<endl;
      return;
    }
    cout<<cur->data<<" <- ";
    return print(head,cur->next);
}

int main(){
    CDNode<int> *head = takeInput<int>();
    print(head,head);
    }
#包括
使用名称空间std;
模板
类CDNode{
公众:
T数据;
CDNode*next;
CDNode*prev;
CDNode(tx){
数据=x;
next=nullptr;
prev=nullptr;
}
};
模板
CDNode*takeInput(){
库特普雷夫=尾巴;
tail=tail->next;
}
cin>>数据;
}
回流头;
}
模板
无效打印(CDNode*头,CDNode*cur){
如果(当前->下一步==头部){

cout在循环列表中tail->next应该指向使其循环的head节点。您的代码只是一个双列表。

在调试器中运行程序时,您观察到了什么,一行一行地执行,并观察变量如何变化?我是编程新手,不知道如何调试代码。如果您能教我一些这样做会很有帮助。这是一项基本技能,使用任何像样的IDE都很容易做到。我没有IDE,我使用linux,使用Geany和Visual Studio代码,有时使用代码块,但我无法有效地使用代码块,因为这太令人困惑了。Visual Studio代码和代码块可以配置为使用调试er IIRC(顺便说一句,这些是IDE)。