Я пытаюсь выполнить глубокую копию для своей очереди (FIFO) с использованием узлов, и я получаю сообщение об ошибке и не знаю, что вызывает его. Все методы работают нормально, когда я ничего не копирую, но как только я пытаюсь копировать, я получаю сообщение «MyQueue.exe», перестало работать. Это происходит, когда я даже не использую методы. Это также происходит, даже если я прокомментирую весь цикл do-while. Кто-нибудь знает, что вызывает это?Глубокое копирование очереди с использованием ошибки времени выполнения узла
MyQueue::MyQueue (void)
{
head = NULL;
queueSize = 0;
}
MyQueue::MyQueue (const MyQueue & myq)
{
copyQueue (myq);
}
MyQueue & MyQueue::operator = (const MyQueue & myq)
{
copyQueue (myq);
return *this;
}
void MyQueue::copyQueue (const MyQueue & myq)
{
head = NULL;
queueSize = 0;
Node* temp = myq.head->next;
do
{
enqueue(myq.head->data);
temp = temp->next;
}
while (temp->next != NULL);
}
MyQueue::~MyQueue (void)
{
}
void MyQueue::enqueue (const int n)
{
Node* temp = tail;
tail = new Node (n);
queueSize++;
if (empty())
{
head = tail;
}
else
{
temp->next = tail;
}
}
int MyQueue::dequeue (void)
{
if (!empty())
{
int result = head->data;
Node* temporary = head;
head = (temporary->data, temporary->next);
queueSize--;
return result;
}
else
{
std::cout << "No Items to remove" << std::endl;
return NULL;
}
}
int MyQueue::peek (void)
{
return head->data;
}
bool MyQueue::empty (void)
{
if (head == NULL || queueSize == 0)
{
return true;
}
return false;
}
Это как мой узел копируется
Node & Node::operator = (const Node* & nd)
{
data = nd->data;
next = nd->next;
}
Можно ли задать [минимальный полный пример] (http://sscce.org), чтобы спросить? – Beta
С кодом есть несколько проблем. Назначение 'Node' не является глубоким заданием. Ваш 'copyQueue()' копирует первый элемент входной очереди несколько раз, вместо копирования каждого члена очереди. Ваш 'dequeue()' не удаляет память, выделенную в 'enqueue()'. Вероятно, ваш сбой произошел из-за NULL разыменования в состоянии 'while' вашего метода copyQueue(). – jxh