(C )当在同一类中调用时,污点指针返回正确的值,而从MAIN调用时为0
(C++) Dereferenced pointer returns correct value when called within same class, and 0 when called from main
我正在尝试进行某些对象的定期快照。为了实现此目的
-
调用TakeNapShot()的GameManager在我想保存的对象(std :: list对象;)它迭代槽槽,将其删除,并制作一个新对象复制我感兴趣的值的类型。
-
复制后,将新对象推到向量上,并创建一个新的gamestate对象(gamestate是"快照")。
-
然后将矢量存储在新的GameState对象中,并将GameState对象推入游戏机队列,如果队列的大小超过了一些预定的数量,则以FIFO的方式丢弃。
我遇到的问题是,对于游戏的以后计算,我需要将工作指针提供给游戏的最新快照。我尝试将其存储在公共游戏中*,但是当我从主函数中取出它时,它不会返回正确的值(?)。但是,如果我尝试在takeNapShot()中将其解释,则它将返回正确的值
fps.cpp
// FPS.cpp : Defines the entry point for the console application.
class GameState {
public:
std::vector<Object> objects;
};
class GameManager {
public:
int tick = 0;
int tickrate = 150;
int memorySize = tickrate;
std::list<Object*> objects;
std::queue<GameState> snapshots;
GameState * latestSnapshot;
void AddObject(Object* object) {
objects.push_back(object);
}
void TakeSnapshot() {
GameState snapshot;
std::vector<Object> objectsCopy;
std::list<Object*>::const_iterator it;
for (it = objects.begin(); it != objects.end(); ++it) {
Object copyObject;
copyObject.position = (*it)->position;
objectsCopy.push_back(copyObject);
}
snapshot.objects = objectsCopy;
latestSnapshot = &snapshot;
snapshots.push(snapshot);
if (snapshots.size() > memorySize) {
snapshots.pop();
}
cout << (*latestSnapshot).objects.size() << endl; // <--- RETURNS 2
}
};
int main(){
GameManager gameManager;
Object player;
Object player2;
player.position = Vector(154, 0, 0);
gameManager.AddObject(&player);
gameManager.AddObject(&player2);
GameState latestSnapshot = *gameManager.latestSnapshot;
cout << latestSnapshot.objects.size() << endl;// <--- RETURNS 0
}
编辑仅留下代码的相关部分。
正如@tesseractbird所说,发生了错误,因为指针指向被摧毁的对象,这使我指出了我添加到队列解决的最后一个值解决了问题。
相关文章:
- 如何安全地从 DLL 调用返回对象
- 类对象属性是否可以调用返回属性应具有的值的方法C++?
- 从类似构造函数的调用返回模板化智能指针
- C ++ DLL导入:函数调用返回错误的结果
- 如何调用返回类方法指针的类方法
- 如何调用返回双精度或字符串并将其保存在地图上但作为对象的类的方法
- FindResource 调用返回 RCDATA 类型的文本文件的 NULL
- 如何调用返回指针数组的函数?C++
- Perl xs - 无法从方法调用返回新的自定义 C++ 对象 - 改为返回标量值
- BOOST ::线程内会成员功能调用返回unique_lock Instantiation错误
- 断言调用返回的函数的签名 &(引用)
- 对于相同的输入参数,多个函数调用返回不同的结果
- 如何调用返回后删除[]内存
- 使用二维数组调用返回结构
- C++:声明、定义和调用返回模板类对象的函数
- 调用返回数组的函数
- c++方法从c#dllimport调用返回0
- 方法调用返回空值
- 我希望计时器只在上一个调用返回或完成执行时调用代码
- 任何时间函数保证为调用返回不同的值