指针数据更改

时间:2012-01-22 19:30:28

标签: c++ memory opengl pointers

我一直试图弄清楚这一点,所以任何帮助都会很棒。我正在为一个学校项目编写一个引擎,我的一个指针中的数据似乎正在发生变化。我声明一个对象指针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();

};

1 个答案:

答案 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; 
}

希望有所帮助!