尝试访问数组时数据从数组中丢失
Data is lost from an array when trying to access it
我已经声明了一个基本结构如下。
struct Item
{
MPoint key; //4 element double array x,y,z,w represents a point in space
Item * next = NULL;
};
我有一小部分指向这些结构的指针
Item * arr[3];
创建项目时,键由其位置定义,该位置是 3D 中的唯一点 space。
Item hti; //create a new item struct called hti
hti.key = transf.rotatePivot(MSpace::kWorld);
Item * p_hti = &hti; //pointer to the struct
arr[0] = p_hti;
主要问题是当我在调试器中观察 arr[0] 变量时,它显示了正确的键值。但是,一旦我检查了
中的数据
double x = arr[0]->key.x;
我每次都得到 x = -9.2559631349317831e+61 而不是得到正确的 x 值,对于键 (x,y,z) 中的所有其他值。
我假设上面的奇怪值表示未初始化的内存,但在我尝试将值拉回之前,数组如何正确保存值对我来说没有意义。
如有任何帮助,我们将不胜感激!
在你写的例子中:
Item hti; // declared on the stack
// ...
Item* p_hti = &hti; // points to item on the stack
arr[0] = p_hti; // points to item on the stack
您正在导致此数组引用当前堆栈帧中的项目,这些项目在离开此堆栈帧后将未定义(或者如果您执行破坏当前堆栈的操作,这些项目可能会被破坏)。您对该数组的取消引用是否发生在同一个函数中?还是在您从初始化它的函数 return "arr" 之后发生?如果是后者,那就可以解释你的问题了……它引用的内存超出了范围。为防止该问题,您应该在初始化数组时使用动态内存分配(使用 new
)(您还需要记住在使用相应的 delete
完成后释放它)。
我已经声明了一个基本结构如下。
struct Item
{
MPoint key; //4 element double array x,y,z,w represents a point in space
Item * next = NULL;
};
我有一小部分指向这些结构的指针
Item * arr[3];
创建项目时,键由其位置定义,该位置是 3D 中的唯一点 space。
Item hti; //create a new item struct called hti
hti.key = transf.rotatePivot(MSpace::kWorld);
Item * p_hti = &hti; //pointer to the struct
arr[0] = p_hti;
主要问题是当我在调试器中观察 arr[0] 变量时,它显示了正确的键值。但是,一旦我检查了
中的数据double x = arr[0]->key.x;
我每次都得到 x = -9.2559631349317831e+61 而不是得到正确的 x 值,对于键 (x,y,z) 中的所有其他值。
我假设上面的奇怪值表示未初始化的内存,但在我尝试将值拉回之前,数组如何正确保存值对我来说没有意义。
如有任何帮助,我们将不胜感激!
在你写的例子中:
Item hti; // declared on the stack
// ...
Item* p_hti = &hti; // points to item on the stack
arr[0] = p_hti; // points to item on the stack
您正在导致此数组引用当前堆栈帧中的项目,这些项目在离开此堆栈帧后将未定义(或者如果您执行破坏当前堆栈的操作,这些项目可能会被破坏)。您对该数组的取消引用是否发生在同一个函数中?还是在您从初始化它的函数 return "arr" 之后发生?如果是后者,那就可以解释你的问题了……它引用的内存超出了范围。为防止该问题,您应该在初始化数组时使用动态内存分配(使用 new
)(您还需要记住在使用相应的 delete
完成后释放它)。