Когда я пытаюсь снять конечный узел в очереди на основе циклического связанного списка в C ++, возникает ошибка сегментации.Остальные элементы перед последним удаляются удачно, это только последний, и кажется, что это проблема с освобождением, однако единственный журнал от терминала - ошибка сегментации: 11. Может ли кто-нибудь помочь мне понять, почему я получаю такое поведение?,Я вставил полный файл реализации ниже, если это проблема с функцией или конструкторами Enqueue.
#include "BQUEUE.h"
#include <iostream>
using namespace std;
BQUEUE::BQUEUE(): front(nullptr) {}
BQUEUE::BQUEUE(const BQUEUE & queue){
bqnode *temp = queue.front;
while (temp->next != queue.front){
Enqueue(temp->time);
temp = temp->next;
}
Enqueue(temp->time);
}
BQUEUE::~BQUEUE(){
bqnode *current = front;
while (current->next != front)
Dequeue();
}
void BQUEUE::Dequeue(){
// Empty queue
if (front == nullptr){
return;
} else if (front->next == front){
front->next = nullptr;
delete front;
front = nullptr;
} else {
bqnode *temp = front, *current = front;
while (current->next != front)
current = current->next;
front = front->next;
current->next = front;
delete temp;
}
}
void BQUEUE::Print(){
bqnode *temp = front;
while (temp->next != front){
cout << temp->time << endl;
temp = temp->next;
}
cout << temp->time << endl;
}
void BQUEUE::Enqueue(int i){
bqnode *newNode = new bqnode;
newNode->time = i;
if (front == nullptr){
front = newNode;
front->next = front;
} else {
newNode->next = front;
bqnode *previous = front;
if (previous->next == front){
front->next = newNode;
return;
}
while (previous->next != front)
previous = previous->next;
previous->next = newNode;
}
}
DRIVER:
#include <iostream>
#include "BQUEUE.h"
using namespace std;
int main(){
BQUEUE k;
k.Enqueue(60);
k.Dequeue(); // Segmentation fault occurs here
}
HEADER:
#ifndef BQUEUE_H
#define BQUEUE_H
class bqnode {
public:
int time;
bqnode *prev, *next;
};
class BQUEUE {
public:
BQUEUE();
~BQUEUE();
BQUEUE(const BQUEUE &);
void Enqueue(int);
void Dequeue( );
void Print( );
private:
bqnode *front;
};
#endif