기본적으로 연결된 목록을 사용하여 대기열에있는 사람들을 시뮬레이션하고 대기열 앞에있는 사람이 업무를 마칠 때까지 기다립니다. . 처음 몇 사람들은 잘 지내지 만, 두 번째 대기열 해제 호출을 받으면 나를 세그 폴트합니다. gdb 디버거는 오류가이 줄에서 오는 것이라고 말합니다. head = current-> next; (여기서 current = head). (난 메모리 누수가 발생하고있어가 대기 상태 때 경우에) 여기 dequeue 함수를 사용하는 SegFaulting
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;
}
너희들로 제공 할 수있는 어떤 도움 segfault가 일어날 수있는 곳까지는 놀라운 일이 될 것입니다. 미리 감사드립니다.
필요한 경우 자세한 정보를 제공 할 수 있습니다.
우연히'Node'에 대한 소멸자에서 우스운 일을하고 있습니까? 내가 본 유일한 사실은'dequeue' 함수 ('head = current-> next;')에서'head' ('current'')가'NULL'인지를 체크하지 않는다는 것입니다. 비어있는 큐에서 큐를 해제하는 경우이 작업이 중단됩니다. ** 편집 : ** 아, 그게 문제라고 생각합니다.'dequeue'는'enqueue '에 의해 사용 된'tail' 포인터를 재설정하지 않기 때문입니다. – paddy