У меня есть Поток 1: EXC_BAD_ACCESS (код = 1, адрес = 0x8) ошибка.Я думаю, что из-за плохого управления памятью.Какие шаги я могу предпринять, чтобы предотвратить это? - PullRequest
0 голосов
/ 20 сентября 2018

Вот мой код:

template<class T>
void list<T>::addEnd(T input) {
    node<T> *tempNode = new node<T>;
    node<T> * current = head;
    while (current->next == nullptr) {
        current = current->next;
    }
    tempNode->data = input;
    current->next = tempNode;
    tempNode->next = nullptr;
    tempNode->prev = current;
    tail = tempNode;
 }

Ошибка возникает в строке while (current-> next == nullptr).Я пытаюсь реализовать двусвязный список.

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Первоначально current не является nullptr, затем, скажем, current->next является nullptr.Таким образом, после выполнения current = current->next, current становится nullptr.

Затем current->next == nullptr оценивается, и вы получаете нарушение доступа, так как current равно nullptr, потому что вы разыменовываете нулевой указатель плюс небольшое смещение.

0 голосов
/ 20 сентября 2018

Проблемный участок кода, который может вызвать утечку памяти.Например, вы никогда не удаляли свою локальную переменную.Так что если у вас нет специальной нелепой реализации оператора new () где-то в вашем заголовке, это вызовет проблемы, особенно если вы застряли в этом цикле while-

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...