Почему объявление этой переменной в этом методе перезаписывает член моего класса (C++)?

Я пытаюсь реализовать класс связанного списка. У меня есть структура с именем node, в которой есть данные и node*, а также класс связанного списка, который имеет указатель на головной узел связанного списка в качестве члена класса. Я написал метод вставки для класса связанного списка, который вставляет данные в n-ю позицию:

  void insert(int x, int n) {

        node* iterator = headNode;
        node* temp;
        temp->data = x;

        for (int i = 0; i < n-1; i++)
        {
            iterator = iterator->next;
        }
        temp->next = iterator->next;
        iterator->next = temp;
    }

Однако, когда я это делаю, член класса головного узла перезаписывается временным. С помощью cout я узнал, что строка

        temp->data = x;

Это строка, которая перезаписывает его. Может кто-нибудь объяснить, почему? Кстати, мне удалось решить проблему перезаписи, объявив temp в куче с помощью new, но опять же, может кто-нибудь объяснить, почему?


person Reean    schedule 14.06.2020    source источник
comment
temp->data = x; вызывает неопределенное поведение, так как temp не указывает на допустимый объект node (он указывает на случайный адрес, поскольку вы не инициализировали указатель)   -  person UnholySheep    schedule 14.06.2020
comment
Думаю, я понял. Объявление использования new создает объект узла и возвращает указатель, но здесь я указываю на то, чего не существует. Спасибо большое.   -  person Reean    schedule 14.06.2020


Ответы (1)


@UnholySheep указал в комментариях, что я только что объявил указатель, не создавая объект узла, поэтому происходит неопределенное поведение. Спасибо большое.

person Reean    schedule 14.06.2020