2013-10-14 36 views
1

利用这种主:(C++错误:指针被释放没有被分配),用于链表

void print_first(Queue q); 

int main() 
{ 
    Queue q1; 
    Queue q2(4); 
    q2.push(5); 
    q2.push(3); 
// q2.print_list(); 
    for (int i = 0; i < 3; i++) 
    { 
     print_first(q2); 
    } 
    return 0; 
} 

void print_first(Queue q) 
{ 
    if (!q.isEmpty()) 
    { 
     cout << q.pop() << endl; 
    } 
    else 
    { 
     cout << "Nothing in queue" << endl; 
    } 
} 

和类队列,其具有与“头”和“尾”作为链接列出了这些函数定义指针在链表中的第一个和最后节点,其中包含另一个结构“数据”存储的重新定义类型的ElementType每个节点:

bool Queue::push(ElementType newElement) 
{ 
    tail->next = new Node; 
    if (tail->next == NULL) 
    { 
     return false; 
    } 
    tail->next->data.value = newElement; 
    tail->next->next = NULL; 
    tail = tail->next; 
    return true; 
} 

ElementType Queue::pop() 
{ 
    Node *newNode; 
    ElementType returnData; 
    returnData = head->data.value; 
    newNode = head; 
    head = head->next; 
    delete newNode; 
    return returnData; 
} 

bool Queue::isEmpty() 
{ 
    if(head == NULL) 
    { 
     return true; 
    } 
    return false; 
} 

为什么我收到此错误? 装配线模拟器(9701)的malloc:*错误对象0x1001000e0:被释放的指针没有被分配 *设置malloc_error_break断点调试

+1

您是否遵循三法则? – chris

+2

将'void print_first(Queue q)'更改为'void print_first(Queue&q)'(在两个地方)并查看它是否有所不同。 –

回答

1

有你显示的代码,我觉得现在的问题是,您将队列q的副本传递给功能print_first

void print_first(Queue q) 

如果您没有正确写入复制构造函数,那么您可能会遇到该函数的一些问题。

相关问题