对 Vector<Ref *> 进行 clear() 时有时报错

ccocos2d-x 新手一枚,在用一些基本东西时总出现小概率崩溃问题,感觉是用的姿势不太对,求指点。

游戏中有一个 Vector<Player *> ,保存玩家信息,Player 类继承 Ref,由于用的地方很多,所以写成了单例的,但是又需要在一个游戏结束时,清空这个 Vector,所以在 GameScene 的悉构函数中调用了清空方法:

PlayerManager::getInstance()->clearPlayerVectro();

clearPlayerVector 方法如下:

void PlayerManager::clearPlayerVector()
{
mPlayerVector->clear();
}

但是有时候在调用这个 clear 方法的时候会崩溃,报的错误就是空引用:
EXC_BAD_ACCESS(code=1, address=0x10000…)

测试的时候发现,如果玩家数是 6 个,就很容易出现崩溃,并且每次都是在悉构第六个的时候崩溃(在悉构方法中打了 Log 看到的),如果不到 6 个概率就变得非常小,非常奇怪的问题。

补充一下,崩溃的具体位置是 CCRef.cpp (line 165)

开发环境 Mac Xcode,cocos2d-x 版本 3.10,运行环境 IOS 9.3

Vector<Ref*> 进行 clear 的时候会遍历 Vector 里面的每一个指针,并且调用release方法,如果你的对像是 push 进来的,而且没有其它地方进行 retain, release 操作的话,理论上不会崩溃。。。

你最好建一个最小的工程,把你的测试代码和重现方法描述清楚,这样方便大家给你找出问题来。