我已经宣布了一个基本结构如下。
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)。
我假设上面的奇怪值表示未初始化的内存,但是在我尝试将值拉回来之前,对于数组如何正确保持值是没有意义的。
任何帮助将不胜感激!
答案 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
完成后,您还需要记住解除分配。 )。