Ошибка EXC_BAD_ACCESS при выполнении связанного списка - PullRequest
0 голосов
/ 22 января 2020

Я пишу программу, которая добавляет серию целых чисел в список перемещения (выполняется со связанным списком). Затем требуется другой набор целых чисел, который программа должна искать в связанном списке. Если программа находит целое число, которое ищет, число перемещается в начало связанного списка.

У меня ошибка при EX_BAD_ACCESS, когда я запускаю метод поиска:

void P1LinkedList::search(const int &query){
    iterator itr = begin();

//erases current position, inserts found number to front, increments traversal count
    for(int i = 0; i < theSize; i++){
        if(query == itr.current->data){

            push_front(query);
            erase(itr);
        }
        theTraversalCount++;
        itr++;
    }
}

Ошибка возникает в операторе if в for l oop. С itr.current->data я пытаюсь получить целое число, удерживаемое узлом, на который указывает itr, но XCode сообщает мне, что узел нулевой.

Кроме того, вот моя реализация класса итератора:

#include"iterator.h"

    iterator::iterator(Node *p) 
        :const_iterator{p}{}

    int& iterator::operator*(){
        return const_iterator::retrieve(); 
    }

    const int& iterator::operator*() const{
        return const_iterator::operator*(); 
    }

    iterator& iterator::operator++(){
        this ->current = this->current->next; 
        return *this; 
    }

    iterator iterator::operator++(int){
            iterator old = *this; 
            ++(*this); 
            return old; 
    } 

    iterator iterator::operator--(){
        this->current = this->current->prev;
        return(*this); 
    }

И этот метод вызывает search():

void completeQueries(const std::string & queries, P1LinkedList & myList){
    std::istringstream iss(queries);

    for(int i=0; i < 100; i++){
        int val;
        iss >> val;
        myList.search(val);
    }
}

Редактировать:

Вот мой метод erase ():

iterator P1LinkedList::erase(iterator itr){
    Node* p = itr.current; 
    iterator retVal{p->next}; 
    return nullptr; 
}
...