Не могу понять, как инициализировать двойные указатели для SkipList - PullRequest
0 голосов
/ 10 ноября 2019

Мне нужно создать структуру данных скиплиста, двумерную матрицу двусвязных списков. Мой профессор хочет, чтобы у нас в каждой строке была INT_MIN, а в хвосте каждой строки - INT_MAX, на которую указывают двойные указатели с именами frontGuards и tailGuards. Я получаю сообщение об ошибке с моим текущим кодом Exception 0xc0000005 encountered at address 0xf71c3d: Access violation writing location 0xcccccccc , которое, как я предполагаю, означает, что что-то не так с тем, как у меня установлены указатели, но я не могу понять, почему. Моя программа не может пройти мимо конструктора, и до сих пор я пытался отладить, чтобы посмотреть на это, и он говорит, что this = {SkipList * const |0x005efddc} 0x005efddc, что также выглядит как проблема. вот мой конструктор в .cpp файле и мой .h файл

конструктор:

SkipList::SkipList() // default constructor that sets front and rear guards
{
    frontGuards[0]->data = INT_MIN;
    rearGuards[0]-> data = INT_MAX;
    frontGuards[0]->next = rearGuards[0];
    rearGuards[0]->previous = frontGuards[0];
    frontGuards[0]->previous = nullptr;
    rearGuards[0]->next = nullptr;
}

.h файл:

class SkipList
{

    private:
        class SNode
        {
        public:
            // SNode stores int as data
            explicit SNode(int data);
            // data for SNode
            int data;
            // link to next SNode
            SNode *next;
            // link to prev SNode
            SNode *previous;
            // link to up one level
            SNode *upLevel;
            // link to down one level
            SNode *downLevel;


        };
        SNode **frontGuards;
        SNode **rearGuards;

    public:
        void addBefore(SNode *newNode, SNode *nextNode);
        SkipList();
        virtual ~SkipList();
        bool Add(int data);
        friend ostream &operator<<(ostream &os, const SkipList &list);

};

В настоящее время я только пытаюсьПолучите все функции класса, работающие с одним двусвязным списком, прежде чем перейти к матрице. Извините, если это что-то простое, чтобы понять, что я все еще очень наивен, но я не могу получить помощь от репетитора моей школы из-за моей работы и отсутствия школы из-за праздников. Я никогда не использовал двойные указатели, и я не понимаю, почему мне нужно использовать их или переднюю / заднюю охрану для скиплиста или что происходит с моим кодом. Я прошу прощения за все, что кажется обыденным или излишним. Что это значит, что указатель не инициализирован? Особенно, если я пытаюсь, чтобы он указывал на данные с помощью frontGuards [0] -> data = INT_MIN

UPDATE: я попытался инициализировать указатели на nullptr в заголовочном файле, но это не помогло, но все равно выдаетта же ошибка

...