C++ 使用节点的深度复制队列运行时错误

C++ 使用节点的深度复制队列运行时错误,c++,C++,我试图使用节点对队列(FIFO)执行深度复制,但我得到了一个错误,不知道是什么导致了它。当我不复制任何东西时,所有的方法都可以正常工作,但当我尝试复制时,一个“MyQueue.exe”停止工作。当我甚至不使用这些方法时,就会发生这种情况。即使我注释掉整个do-while循环,也会发生这种情况。有人知道这是什么原因吗 MyQueue::MyQueue (void) { head = NULL; queueSize = 0; } MyQueue::MyQueue (const My

我试图使用节点对队列(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;
}
这将导致崩溃,因为
为空,并且您在
copyQueue()
方法中取消对它的引用

Node* temp = myq.head->next;

a是否要求太多?您的代码存在多个问题。您的
节点
分配不是深度分配。您的
copyQueue()
多次复制输入队列的第一个元素,而不是复制每个队列成员。您的
dequeue()
不会删除
enqueue()
中分配的内存。崩溃可能是由于
copyQueue()
方法的
while
条件中的空解引用造成的。
MyQueue q1;
MyQueue q2 = q1; // Crash.
Node* temp = myq.head->next;