尝试访问数据时,数据会从数组中丢失

时间:2015-06-27 01:54:35

标签: c++ arrays pointers struct maya

我已经宣布了一个基本结构如下。

struct Item
{
    MPoint key; //4 element double array x,y,z,w represents a point in space
    Item * next = NULL;
};

我有一小部分指向这些结构的指针

Item * arr[3];

创建项目时,密钥由其位置定义,该位置是3D空间中的唯一点。

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的正确值,而是每次获得x = -9.2559631349317831e + 61以及键中的所有其他值(x,y,z)。

我假设上面的奇怪值表示未初始化的内存,但是在我尝试将值拉回来之前,对于数组如何正确保持值是没有意义的。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:4)

在您编写的示例中:

 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

您导致此数组引用当前堆栈帧中的项目,并且在离开此堆栈帧后将不会定义(或者如果执行破坏当前堆栈的操作,则可能会损坏该数组)。你在这个数组的解引用是否发生在同一个函数中?或者在你返回后发生#arr"从你初始化它的功能?如果是后者,这可以解释你的问题...它引用的内存超出了范围。为了防止出现这种问题,您应该在初始化阵列时使用动态内存分配(使用new)(在使用相应的delete完成后,您还需要记住解除分配。 )。