gpt4 book ai didi

c++ - 指针数据变化

转载 作者:太空宇宙 更新时间:2023-11-04 12:13:10 25 4
gpt4 key购买 nike

我已经尝试解决这个问题一段时间了,所以任何帮助都会很棒。我正在为一个学校项目编写一个引擎,我的一个指针中的数据似乎在自行变化。我声明了一个对象指针 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->x已经从0变成了which它最初是设置的,现在读作 -1.07374e+008。我唯一能想到的是 Position 指针指向的内存发生了变化,但我不知道为什么或如何避免这种情况。如果有帮助,这里是 actor.h 类:

class Actor{

public:
//constructors
Actor();

//functions
Position* position;
void posCamera();

};

最佳答案

每当你看到像这样疯狂的大 +/- 数字时,它肯定会出现:
A) 您直接或通过指针传入的值从未初始化为开头,或者
B) 该值超出了范围。

您指出它最初是正确的,所以它可能以某种方式超出了范围。它最初是分配给堆,还是分配给堆栈?你是如何创建原始指针的?一个常见的初学者错误是不正确地使用 & 地址引用。如果有帮助,这是一个简单的例子;它还会重现您指出的错误,我的第一个打印值是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;
}

希望对您有所帮助!

关于c++ - 指针数据变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8963976/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com