返回成员变量时,为什么函数内外得到的结果不同
When returning a member variable, why do I get different results inside and outside a function?
当我尝试在函数中打印成员变量时,它给了我想要的结果。但是,如果我返回此成员变量,然后尝试在 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()
中,next1
和next2
变量在方法结束时都被销毁(它们不复存在)。因此,您将返回指向不再存在的对象的指针。此类指针称为悬空指针,取消引用悬空指针是未定义的行为。
相关文章:
- 你好。。。id_public变量不应该给出结果为 81 和 86 吗?为什么它为两个派生类占用不同的内存位置?
- 算术运算的结果类似于:C浮点变量中的1/3
- C++ SSE 内部函数:将结果存储在变量中
- 按值传递变量与按引用传递变量具有相同的结果
- 为什么我可以改变常量对象中的成员变量,这是返回常量对象函数的结果?
- 调用一个小函数两次(例如在if条件和主体中)比将结果存储在局部变量中更可取
- 为什么使用 SPI 时,全局缓冲区变量产生的结果与局部缓冲区变量不同
- 带有大结构变量的 CUDA 内核函数给出了错误的结果
- 如果我将索引变量更改为零,并且合并函数中的k = 0,则获得合并排序的错误结果
- 整数变量与整数字面变化的乘法结果
- 如果结果存储在变量中forward_as_tuple然后在 std::apply 中使用之前丢失右值引用
- 使用变量和常量的结果在 c++ 中并不相同
- 是否可以将类成员变量设置为类函数的结果?
- 为什么总和变量的结果= 1
- 对条件表达式结果的赋值(其中第二个和第三个操作数是相同类型和值类别的变量)是否仍然存在?
- 如何使变量始终等于某些计算的结果
- 当变量的顺序发生变化时C++双倍乘法会产生不同的结果
- TLS变量访问的结果未缓存
- 用名称为“ this”内部括号内的变量在3个不同的编译器上导致不同的结果
- 从返回类型的函数中获取结果'void'而结果变量是输入参数之一 - C++