它一直工作,直到我尝试在第三个节点(值为3的节点)中打印值 它在getNext()函数定义行上给出了一个错误的访问错误(代码= 1地址= 0x0)。 问题是什么?为什么它适用于前两个,但后来没有?
#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 :(得分:0)
你的一个问题是:
ListNode getNext(){return *next;}
它按值返回节点的COPY。当您对该值调用setNext()
时,您只需修改在表达式结尾处销毁的临时实例。所以它没有持久的效果。
另一种选择是:
ListNode& getNext(){return *next;}
这将向节点返回引用。我相信这将解决你所问的问题。你有其他人,比如泄漏记忆。