C++ 使用节点的深度复制队列运行时错误
我试图使用节点对队列(FIFO)执行深度复制,但我得到了一个错误,不知道是什么导致了它。当我不复制任何东西时,所有的方法都可以正常工作,但当我尝试复制时,一个“MyQueue.exe”停止工作。当我甚至不使用这些方法时,就会发生这种情况。即使我注释掉整个do-while循环,也会发生这种情况。有人知道这是什么原因吗C++ 使用节点的深度复制队列运行时错误,c++,C++,我试图使用节点对队列(FIFO)执行深度复制,但我得到了一个错误,不知道是什么导致了它。当我不复制任何东西时,所有的方法都可以正常工作,但当我尝试复制时,一个“MyQueue.exe”停止工作。当我甚至不使用这些方法时,就会发生这种情况。即使我注释掉整个do-while循环,也会发生这种情况。有人知道这是什么原因吗 MyQueue::MyQueue (void) { head = NULL; queueSize = 0; } MyQueue::MyQueue (const My
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;
}
这将导致崩溃,因为头
为空,并且您在copyQueue()
方法中取消对它的引用
Node* temp = myq.head->next;
a是否要求太多?您的代码存在多个问题。您的
节点
分配不是深度分配。您的copyQueue()
多次复制输入队列的第一个元素,而不是复制每个队列成员。您的dequeue()
不会删除enqueue()
中分配的内存。崩溃可能是由于copyQueue()
方法的while
条件中的空解引用造成的。
MyQueue q1;
MyQueue q2 = q1; // Crash.
Node* temp = myq.head->next;