返回成员变量时,为什么在函数内外得到不同的结果?

时间:2015-01-29 20:35:43

标签: c++ function pointers vector return

当我尝试在函数内部打印成员变量时,它会给出我想要的结果。但是,如果我返回此成员变量然后尝试在main中访问它,它会给我一个不同的结果。为什么会这样?

以下是我的代码:

Node.h:

#include <cstddef>
#include <vector>
#include <iostream>

using namespace std;

class Node{
 public:
    int v;
    Node * parent;
    Node(int I);
    Node(int I,Node * p);
    vector<Node*> myfun();
}

Node.cpp:

Node::Node(int I){
    v = I;
    parent = NULL;
}

Node::Node(int I,Node * p){
    v = I;
    parent = p;
}

vector<Node*> Node::myfun(){
    vector<Node*> myvec;

    Node next1(1,this);
    myvec.push_back(&next1);

    Node next2(2,this);
    myvec.push_back(&next2);

    cout << myvec[0]->v << endl; // prints out "1"
    cout << myvec[1]->v << endl; // prints out "2"

    return(myvec);
}

main.cpp中:

#include "Node.h"

int main(){
    vector<Node*> myvec;
    Node init(0);
    myvec = init.myfun();

    cout << myvec[0]->v << endl; // prints out garbage
    cout << myvec[1]->v << endl; // prints out garbage

    return 0;
}

1 个答案:

答案 0 :(得分:6)

因为在您的Node::myfun()中,您的next1next2变量在方法结束时都被销毁(它们不再存在)。因此,您将返回指向不再存在的对象的指针。这样的指针被称为悬空指针,并且取消引用悬空指针是Undefined Behavior。