Я изо всех сил пытаюсь реализовать конструктор копирования для двусвязного списка.Программа компилируется, но я сталкиваюсь с проблемой использования функции «push_back» в конструкторе копирования для добавления вновь созданных узлов в список.Ниже обсуждаются конструктор копирования и функции push_back.
List::List(const List& rhs) // Copy constructor
{
//this pointer is for the list that is being copied from
Node* rhsNodePtr;
//setting the new pointer to the first node of the old list
rhsNodePtr = rhs.first;
//looping until the end of the list
while(rhsNodePtr != nullptr){
//declaring new node to copy data into
Node* newNode = new Node("");
//copying node data from original list into new node
newNode->data = rhsNodePtr->data;
//adding new copied node to a new list
push_back(newNode->data);
//advancing the old list pointer location for the loop
rhsNodePtr = rhsNodePtr->next;
}
}
void List::push_back(string element)
{
Node* new_node = new Node(element);
if (last == nullptr) // List is empty
{
first = new_node;
last = new_node;
}
else
{
new_node->previous = last;
last->next = new_node;
last = new_node;
}
}
Я приношу свои извинения, если пропустил какие-либо соответствующие подробности.Обратите внимание, что я не просто ищу решение или исправление, но объясняю, почему push_back ();функция не работает в моей текущей реализации.
Редактирование: цикл while в конструкторе копирования застревает после вызова функции push_back.
Edit: «First» и «last» инициализируются в объявлении класса List, и оба значения равны «nullptr» в конструкторе.
Edit: После запуска через отладчик я узнал, чтов функции push_back в строке last->next = new_node;
имеется недопустимый доступ к памяти (ошибка сегментации)