我一直试图弄清楚这一点,所以任何帮助都会很棒。我正在为一个学校项目编写一个引擎,我的一个指针中的数据似乎正在发生变化。我声明一个对象指针Actor * actor;在Engine.h中,用
初始化它void Engine::initActor(Actor* newActor)
{
actor = newActor;
std::cout << "Actor imported." << std::endl;
}
通过向initActor()发送一个新的actor指针,该指针具有一个通用Position类的Position指针,如下所示:
class Position
{
public:
//vars
GLfloat x,y,z;
GLfloat rotx, roty, rotz;
//constructors
Position();
Position(int newx, int newy, int newz);
Position(int newx, int newy, int newz, int newRotx, int newRoty, int newRotz);
GLfloat distanceTo(Position pos1);
};
然后,我在绘制世界时去访问Actor类的Position对象指针,即使Position指针指向它初始化的同一地址,position-&gt; x也已从0更改为它最初设置,现在读作-1.07374e + 008。我唯一能想到的是,位置指针指向的内存已经改变,但我不知道为什么或如何避免这种情况。如果它有帮助,这是actor.h类:
class Actor{
public:
//constructors
Actor();
//functions
Position* position;
void posCamera();
};
答案 0 :(得分:1)
每当你看到疯狂的大+/-数字时,就会突然显示出一个明确的信号:
A)您直接或通过指针传递的值从未初始化为开始或为
B)价值超出了范围。
你表明它原来是正确的,所以它可能会以某种方式超出范围。最初是否分配给堆,而不是堆栈?你是如何创建原始指针的?一个常见的初学者错误是不正当使用&amp;地址参考。如果它有帮助,这是一个简单的例子;它还会重现您指出的错误,对我来说首先打印的值是 1606416707,第二个是正确的100值。
#include <iostream>
#include <vector>
using namespace std;
vector<int>* CreateVectorPtrIncorrect();
vector<int>* CreateVectorPtrCorrect();
int main ()
{
vector<int>* vec1 = CreateVectorPtrIncorrect();
cout << vec1->at(0) << endl;
vector<int>* vec2 = CreateVectorPtrCorrect();
cout << vec2->at(0) << endl;
return 0;
}
// Incorrect:
vector<int>* CreateVectorPtrIncorrect() {
vector<int> vec;
int index_zero = 100;
vec.push_back(index_zero);
vector<int>* vec_pointer = &vec;
return vec_pointer;
}
// Correct:
vector<int>* CreateVectorPtrCorrect() {
vector<int>* vec_pointer = new vector<int>;
int index_zero = 100;
vec_pointer->push_back(index_zero);
return vec_pointer;
}
希望有所帮助!