«Это был nullptr» ошибка в C ++. Проблемы со связанным списком - PullRequest
0 голосов
/ 08 июня 2019

Я пытаюсь узнать о связанных списках, а также овладеть указателями.Прямо сейчас программа, над которой я работаю, сортирует имена в связанном списке.По сути, пользователь вводит имя, и это имя отправляется между двумя другими элементами в списке (если список не пустой).У меня есть структура под названием «Узел», которая содержит указатель на следующий узел и часть данных (строка).Вот где я.Моя программа успешно добавляет имя, если указатель головы равен nullptr.Затем он устанавливает newNode-> рядом с nullptr, чтобы я мог быть определен как конец списка.

Вот этот код:

// create a new node
Node* newNode = new Node;
Node* trail = nullptr;
Node* current = head;

// initialize the value of the new node
newNode->data = name;
// Make new node point to the previous first node
//base case 1
if (head == nullptr) {
    head = newNode;
    newNode->next = nullptr;
    return true;
}

Проблема заключается в следующем разделекода:

if (head != nullptr) {
    current = head;
    trail = current;
    current = current->next;
    while (name.at(1) > current->data.at(1)) {
        trail = current;
        current = current->next;

    }
    if (current->next = nullptr) {
        trail->next = newNode;
        newNode->next = nullptr;
    }
    if (current->next != nullptr) {
        newNode->next = current;
        trail->next = newNode;
    }

}

Исключение выдается.Сообщение об ошибке говорит, что это был nullptr.У меня вопрос, что это значит?Как возникает эта ошибка, и как лучше всего ее исправить?Извините, если этот вопрос повторяется, но другие подобные вопросы не имеют ничего общего со связанными списками.Спасибо!

1 Ответ

1 голос
/ 08 июня 2019

Где в этом коде вы проверяете, не является ли current nullptr?

    while (name.at(1) > current->data.at(1)) {
        trail = current;
        current = current->next;

    }

Далее, обратите внимание, что у вас есть назначение вместо сравнения:

    if (current->next = nullptr) {
        trail->next = newNode;
        newNode->next = nullptr;
    }

Этот оператор if всегда будет ложным, следующий оператор (if (current->next != nullptr)) тоже.

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