【发布时间】:2013-05-19 09:47:14
【问题描述】:
我有一个小错误让我大吃一惊。也许这很简单,但我完全迷失了。
我有一个基本的 POD struct:
struct Data{
bool isInvalid=false;
vec3 *vector; //vec3 is another struct with x,y,z components
Node*node;
bool isFresh;
unsigned int *form;
};
我有一个函数:
Data getData(){
Data forReturn;
//...populates the forReturn struct
cout<<forReturn.vector->x; //logs correctly a value
return forReturn;
}
cout 日志正确显示我的返回 Data 已被填充。但是当我从另一个函数调用这个函数时,就会出现不同的情况:
Data newData=getData(); //logs as above
cout<<newData.vector->x; //is empty!!
这是怎么回事?!我的日志输出并排显示这两行,因为它们紧随其后,但是发生了什么?这不是多线程的,所以变量和指针不应该在这两行之间改变!
【问题讨论】:
-
你能显示
Data的完整定义吗? -
forReturn.vector指向什么? BTWforReturn不是指针,所以forReturn->vector不会编译。 -
Data可能是struct Data *的类型定义,还是类似的东西?如果是这样,你真的应该证明这一点,它从根本上改变了问题。 -
显示填充
forReturn->vector的代码。理想情况下,展示一个可以编译和重现问题的最小程序。 -
@Fellowshee:现在你应该展示如何填充它
标签: c++