基本上,我正在使用链表实现队列,以尝试模拟人们在商店排队等候整天,并等待前面的人完成他们的业务。前几个人通过得很好,但当我到第二次调用dequeue时,它会发生段错误。gdb调试器说错误来自这一行head = current->next;(其中current = head)。
这是我的dequeue函数:
void BankQueue::dequeue()
{
Node* current=head;
head=current->next;
if(head!=NULL)
{
head->prev=NULL;
}
delete current;
}
这是enqueue函数(如果我在enqueue时导致内存泄漏):
void BankQueue::enqueue(Customer s)
{
Node* node= new node;
node->data=s;
node->next=NULL;
if(tail==NULL)
{
head=node;
tail=node;
node->prev=NULL;
}
else
{
node->prev=tail;
tail->next=node;;
tail=node;
}
任何能够提供的有关段错误可能发生在哪里的帮助都将非常棒,谢谢。顺便说一下,如果需要,我可以提供更多信息。
Node
时做了什么有趣的事情吗?我只看到您在dequeue
函数中使用head=current->next;
前没有检查head
(current
) 是否为NULL
(此处:)。如果在空队列上进行出队操作,这将导致 segfault。编辑:啊,我认为这就是问题所在,因为dequeue
不会重置enqueue
使用的tail
指针。 - paddy