我真的是C和C ++的新手
我试图尝试使用结构来创建一个基本上可以包含float和list的类似列表的结构。
此代码可以编译,但是其行为取决于编译器:
使用Visual Studio社区的最新版本,它先输出5
,然后输出0
。
带有online shell,我得到5
,然后是5
我想获得的是向量通过函数传递时的第二个。
这里是代码:
#include <iostream>
#include <vector>
using namespace std;
struct Box {
Box(char t) {
type = t;
}
union Value {
float number;
vector<Box>* elements;
};
Value value;
char type;
};
Box newBox() {
Box aBox('l');
vector<Box> newVec;
newVec.assign(5, Box('n'));
aBox.value.elements = &newVec;
cout << aBox.value.elements->size() << "\n";
return aBox;
}
int main()
{
Box test = newBox();
cout << test.value.elements->size(); // this is not always working nicely
}
那是哪里来的?
我的代码有问题吗?
还有没有更好的方法来创建这种结构?
在此行:
aBox.value.elements = &newVec;
您正在存储局部变量的地址。当您从newBox
函数返回时,该变量死亡,然后通过指针访问该内存将调用未定义的行为。