Итак, я пытаюсь реализовать приоритетную очередь, используя отсортированный список.Мой класс очереди приоритетов унаследован от моего отсортированного списка.Мой класс отсортированного списка работает нормально, когда я тестирую его функции в драйвере, но я получаю "Segmentation Fault 11"
, когда пытаюсь проверить мою реализацию очереди с приоритетами.Я прогнал свой код через отладчик CLion и получил ошибку "EXC_BAD_ACCESS (code=1, address=0x0)"
, которая, после некоторых исследований, кажется, вызвана попыткой изменить данные в нулевом указателе.Я впервые использую умные указатели, поэтому я думаю, что мои проблемы связаны с неправильным пониманием того, как они создаются и инициализируются.
Вот мой заголовочный файл для моего SL_PriorityQueue
класса:
#ifndef PRIORITY_QUEUE_
#define PRIORITY_QUEUE_
#include "PriorityQueueInterface.h"
#include "LinkedSortedList.h"
#include "PrecondViolatedExcep.h"
#include <memory>
template<class ItemType>
class SL_PriorityQueue : public PriorityQueueInterface<ItemType>
{
private:
std::unique_ptr<LinkedSortedList<ItemType> > slistPtr;
public:
SL_PriorityQueue();
SL_PriorityQueue(const SL_PriorityQueue& pq);
~SL_PriorityQueue();
bool isEmpty() const;
bool enqueue(const ItemType& newEntry);
bool dequeue();
//@throw PrecondViolatedExcept if priority queue is isEmpty
ItemType peekFront() const throw(PrecondViolatedExcep);
};
#endif
Вот драйвер, который я использую для проверки моего кода:
#include "../src/Node.cpp"
#include "../src/LinkedSortedList.cpp"
#include "../src/SL_PriorityQueue.cpp"
#include <iostream>
int main()
{
std::shared_ptr<SL_PriorityQueue<int> > testing (new SL_PriorityQueue<int>());
testing->enqueue(7);
std::cout << testing->peekFront() << std::endl; //I set a break point here, which is where CLion throws the exception
std::cout << testing->dequeue() << std::endl;
std::cout << testing->isEmpty() << std::endl;
return 0;
}
Вот функцияиз SL_PriorityQueue.cpp, который CLion выделил после исключения:
template <class ItemType>
bool SL_PriorityQueue<ItemType>::enqueue(const ItemType& newEntry)
{
slistPtr->insertSorted(newEntry);
return true;
}
Ошибка заставляет меня думать, что когда я вызываю insertSorted в вышеуказанной функции, slistPtr
по-прежнему равен нулю.Мой конструктор для SL_PriorityQueue
пуст, поскольку кажется, что с помощью интеллектуальных указателей они управляют своей собственной памятью, так что мне не нужно устанавливать ее равной нулевому указателю.
Я пытался сделать slistPtr
общимуказатель, чтобы увидеть, не слишком ли много на это указывало, но я только что получил ту же ошибку.
Заранее спасибо за любую помощь, которую вы можете оказать!