Поток плохой доступ

Это работает, пока я не попытаюсь напечатать значение в третьем узле (тот, который имеет значение 3)
Это дает мне неверную ошибку доступа (code = 1 address = 0x0) в строке определения функции getNext ().
В чем проблема? Почему это работает для первых двух, а затем нет?

#include <iostream>
using namespace std;

class ListNode {
float val;
ListNode *next;

public:
ListNode(){val = 0;}
ListNode(float f){val =f;next = NULL;}

void setNext(ListNode *node){next = node;}

void setVal(float f){val = f;}

float getVal(){return val;}

ListNode getNext(){return *next;}
};

int main()
{
ListNode n = *new ListNode(5);
n.setNext(new ListNode(9));
n.getNext().setNext(new ListNode(3));

cout << n.getVal() <<endl;
n = n.getNext();

cout << n.getVal() <<endl;
n = n.getNext();
cout << n.getVal() <<endl;

return 0;
}

0

Решение

Одна из ваших проблем здесь:

ListNode getNext(){return *next;}

Возвращает КОПИЮ вашего узла по значению. Когда вы звоните setNext() для этого значения вы просто изменяете временный экземпляр, который уничтожается в конце выражения. Так что это не имеет длительного эффекта.

Альтернатива будет такой:

ListNode& getNext(){return *next;}

Это вернет ссылка в узел. Я верю, что это решит проблему, о которой вы спрашиваете. У вас есть другие, такие как утечка памяти.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]