求救:为什么在update里面访问vector 得不到值?

我在HelloWorldScene.h里面定义了一个全局变量为

private:
vector<RPGPlayer*> playerList;

然后在HelloWorldScene.cpp的init()函数里面初始化数据为
for (int i = 0; i < 5; i++)
{
RPGPlayer *playerData = RPGPlayer::create();
playerData->level = i;
playerData->nextExp = 10 + i;
this->playerList.push_back(playerData);
}
this->scheduleUpdate();

最后在update函数里面写
void HelloWorld::update(float delta)
{
RPGPlayer *playerData = this->playerList.at(0);
int level = playerData->level;
}

但是在update里面得到的level值是 -572662307。
求大佬给意见。

你的vector是cocos的Vector还是std::vector?如果时候vector的话你的RPGPlayer是继承了Ref的自动释放么?如果RPGPlayer有UI建议addChild添加到运行场景上,保证不会被Ref的autorelease自动释放掉。如果你的RPGPlayer只是数据建议new自己管理释放

如果你的vecto是Vector则不会且你的RPGPlayer是继承Ref的或者其子类的Node等则不会有这样的问题

cocos的create只是将Ref的计数加+,要保证不被autorelease,还可以retain一次,释放的时候自己再release一次,即
for (int i = 0; i < 5; i++)
{
RPGPlayer *playerData = RPGPlayer::create();
playerData->retain();
playerData->level = i;
playerData->nextExp = 10 + i;
this->playerList.push_back(playerData);
}

谢谢,问题解决了,确实是RPGPlayer自己动释放了。