【发布时间】:2013-03-15 17:14:22
【问题描述】:
基本上,我正在使用链表实现一个队列,以尝试模拟一天中在商店排队的人,他们一直等到前面的人完成他们的工作。前几个人很好,但是当我第二次调用 dequeue 时,它会出现段错误。 gdb 调试器说错误来自这一行 head=current->next; (其中 current=head)。
这是我的出队函数:
void BankQueue::dequeue()
{
Node* current=head;
head=current->next;
if(head!=NULL)
{
head->prev=NULL;
}
delete current;
}
这是入队函数(以防我入队时导致内存泄漏):
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;
}
你们能提供的任何关于段错误可能发生在哪里的帮助都会很棒,在此先感谢。
P.S.I 可以在必要时提供更多信息。
【问题讨论】:
-
你有没有在
Node的析构函数中做任何有趣的事情?我看到的唯一一件事是,在dequeue函数(此处:head=current->next;)中使用它之前,您没有检查head(current)是否为NULL。如果在空队列上出队,这将出现段错误。 编辑:啊,我认为这是问题所在,因为dequeue不会重置enqueue使用的tail指针。
标签: c++ linked-list segmentation-fault