(C )当在同一类中调用时,污点指针返回正确的值,而从MAIN调用时为0



我正在尝试进行某些对象的定期快照。为了实现此目的

  1. 调用TakeNapShot()的GameManager在我想保存的对象(std :: list对象;)它迭代槽槽,将其删除,并制作一个新对象复制我感兴趣的值的类型。

  2. 复制后,将新对象推到向量上,并创建一个新的gamestate对象(gamestate是"快照")。

  3. 然后将矢量存储在新的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所说,发生了错误,因为指针指向被摧毁的对象,这使我指出了我添加到队列解决的最后一个值解决了问题。

最新更新