gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 15:38:17 24 4
gpt4 key购买 nike

当我尝试打印一个函数内的成员变量时,它给了我想要的结果。但是,如果我返回这个成员变量然后尝试在 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 变量在最后都被销毁(它们不再存在)的方法。因此,您将返回指向不再存在的对象的指针。此类指针称为悬挂指针,取消引用悬挂指针是未定义行为。

关于c++ - 返回成员变量时,为什么在函数内外得到不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28224105/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com