线程访问不好

时间:2014-04-09 18:51:23

标签: c++ exc-bad-access

它一直工作,直到我尝试在第三个节点(值为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;
}

1 个答案:

答案 0 :(得分:0)

你的一个问题是:

ListNode getNext(){return *next;}

它按值返回节点的COPY。当您对该值调用setNext()时,您只需修改在表达式结尾处销毁的临时实例。所以它没有持久的效果。

另一种选择是:

ListNode& getNext(){return *next;}

这将向节点返回引用。我相信这将解决你所问的问题。你有其他人,比如泄漏记忆。