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

When returning a member variable, why do I get different results inside and outside a function?

本文关键字:结果 变量 成员 函数 为什么 返回      更新时间:2023-10-16

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

这是我的代码的样子:

节点.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();
}

节点.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);
}

主.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;
}

因为在Node::myfun()中,next1next2变量在方法结束时都被销毁(它们不复存在)。因此,您将返回指向不再存在的对象的指针。此类指针称为悬空指针,取消引用悬空指针是未定义的行为。

相关文章: