当我尝试在函数内部打印成员变量时,它会给出我想要的结果。但是,如果我返回此成员变量然后尝试在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;
}
答案 0 :(得分:6)
因为在您的Node::myfun()
中,您的next1
和next2
变量在方法结束时都被销毁(它们不再存在)。因此,您将返回指向不再存在的对象的指针。这样的指针被称为悬空指针,并且取消引用悬空指针是Undefined Behavior。