0

我正在尝试使用节点为我的队列 (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;
        }
4

1 回答 1

0
MyQueue q1;
MyQueue q2 = q1; // Crash.

这将崩溃,因为它是 NULL,并且您在方法head中取消引用它。copyQueue()

Node* temp = myq.head->next;
于 2013-09-26T23:15:31.757 回答