Я не новичок в программировании, но изучаю C++. Для этого я реализую «стандартные» структуры данных на языке C++. Я начинаю с Linked Lists. Я понимаю, как они работают и все такое. Однако, когда я пытаюсь распечатать список, он не останавливается, когда это предполагается. Я установил последний указатель на nullptr и все это и сильно исследовал эту проблему в Интернете, но я не могу найти то, что я делаю, отличное от всех остальных. Вот код:C++ Связанный список Печать Crash
template<typename T>
void LinkedList<T>::print_list(){
list_node<T> *pos = this->start;
while(pos != nullptr){
cout << "PRInting" <<pos->data<<endl <<pos->next;
pos = pos->next;
}
}
Вот полный код:
#ifndef LINKEDLIST_H_INCLUDED
#define LINKEDLIST_H_INCLUDED
#include <iostream>
using std::cout;
using std::endl;
template <class T>
struct list_node{
T data;
list_node<T> *next;
};
template <class T>
class LinkedList{
private:
list_node<T> *start;
public:
LinkedList();
LinkedList(T firstData);
~LinkedList();
void insert_item(T item);
void delete_item(T item);
list_node<T>* search_list();
void print_list();
};
//constructors and destructor
template <typename T>
LinkedList<T>::LinkedList(){
this->start = nullptr;
}
template <typename T>
LinkedList<T>::LinkedList(T firstData){
list_node<T> newNode = {
firstData,
nullptr
};
this->start = &newNode;
cout <<"Constructor" <<this->start->data<<endl;
}
template <typename T>
LinkedList<T>::~LinkedList(){
this->start = nullptr;
}
//Debugging print function
template<typename T>
void LinkedList<T>::print_list(){
list_node<T> *pos = this->start;
while(pos != nullptr){
cout << "PRInting" <<pos->data<<endl <<pos->next;
pos = pos->next;
}
//cout << pos->data;
}
//Operations on Linked Lists
template <typename T>
void LinkedList<T>::insert_item(T item){
list_node<T> *insertNode;
insertNode->data = item;
insertNode->next = this->start;
this->start = insertNode;
cout << "After insert " <<this->start->data << '\n' << this->start->next->data<<endl;
}
#endif // LINKEDLIST_H_INCLUDED
_I установить последний указатель на nullptr_ Мы не можем видеть, что из примера, приведенного. Пожалуйста, предоставьте [mcve]. –
Эта функция выглядит хорошо для меня. Проблема, безусловно, в другом месте. –
Если ваша последняя выводимая строка перед сбоем не равна 0, то у вас нет списка с нулевым завершением – user3853544