C++ 作业排序链表程序中的分段错误

C++ 作业排序链表程序中的分段错误,c++,qt-creator,segmentation-fault,C++,Qt Creator,Segmentation Fault,我知道关于这个错误已经有很多问题和答案了。但是由于话题很多,我仍然无法在我的程序中找到问题。我必须写一个排序的链表,但我试了又试,当我试图获取下一个节点时,却出现了错误。我对C++很陌生,你们能帮我吗?对不起,我的英语不好 预订 class Booking { public: Booking() : data{nullptr},nextNode{nullptr}, prevNode{nullptr} {} Booking(Booking* d) :data{d}, nextNode{nul

我知道关于这个错误已经有很多问题和答案了。但是由于话题很多,我仍然无法在我的程序中找到问题。我必须写一个排序的链表,但我试了又试,当我试图获取下一个节点时,却出现了错误。我对C++很陌生,你们能帮我吗?对不起,我的英语不好

预订

class Booking { 
public: 
Booking() : data{nullptr},nextNode{nullptr}, prevNode{nullptr} 
{}
Booking(Booking* d) :data{d}, nextNode{nullptr}, prevNode{nullptr} {} 

Booking* getNextNode() const { 

return nextNode; // where the SIGSEGV happened, i checked by debugger

 } 
private:
 Booking* nextNode;
 Booking* prevNode; 
 Booking* data;
 } 
分类链接列表

 template<typename T> 

 class SortedLinkedList { 

 public: 

 SortedLinkedList() {
 root = NULL; 
 end = new T; 
 cursor = end;
 size = 0; 
}

 void insertNode(T* data)
{ 
 T* node = new T(data); 
 cursor = root;

 while(cursor->getNextNode()){ // here it go to getNextNode


} 

} 
private: 
T* root; 
T* cursor; 
T* end; }

在构造函数中,将root设置为Null

然后在insertNode中执行以下操作:

cursor = root;
while(cursor->getNextNode())

您需要分配一个根节点,或者处理它为空。

省略号使问题更难诊断,因为代码不完整。请张贴一个可以很容易地运行来说明问题。该程序没有达到这些。。。所以我什么也没写。当我试图使用get功能时,故障就发生了。航班从哪里来?你给出的代码的一小部分假设每次飞行都是一个新实例,是真的吗?排序是如何完成的,您说错误发生在排序过程中,但您没有说明如何执行“错误发生在我尝试使用get函数时。”代码中没有
get()
函数!然后从程序中完全删除这些部分。如果我需要逐行检查您的程序,调整源代码以使其运行,那么验证我的程序==您的程序会困难得多,并且通常会使人们不太可能回答您的问题。在这种情况下,我的光标为null,但它仍然是一个预约吗?在Booking的构造函数中,我有nextNode=nullptr,所以当我使用cursor->getNextNode()时,它应该是nullptr并且While循环仍然运行吗?@TrungHieuLe这是一个指向指针的指针非常有用的地方。
root
和任何
nextNode
之间除了名称之外没有任何区别,通过指向
root
nextNode
的指针,您可以将这种区别提取出来。这样可以避免编写大量代码。使用指针到指针从列表中删除项的。您可以调整逻辑以插入。
 void TravelAgency::readFile(){

 allBookings.insertNode(flight); // flight is an obj of an derived class 
} 
cursor = root;
while(cursor->getNextNode())