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;
}
想問一個[最小完整示例](http://sscce.org)是否太多了? – Beta
您的代碼存在多個問題。您的「節點」分配不是深度分配。您的'copyQueue()'多次複製輸入隊列的第一個元素,而不是複製每個隊列成員。你的'dequeue()'不會刪除在'enqueue()'中分配的內存。您的崩潰可能是由於'copyQueue()'方法的'while'條件導致的NULL解引用。 – jxh