您的位置:首页 > 移动开发 > Cocos引擎

cocos2d学习发现一个C++的一个盲点,

2014-02-13 00:51 387 查看
void GameLayer::runBullteAction(float dt)
{
static unsigned int i = 1;

/*if( i >= 50)
{
bullteArray = weaPon->createNormalWeapon();
i = 1;
CCLog("i= %d\n",i);
}*/

if( i >= 10)
{
i = 1;
//createNormalWeapon返回一个10的CCArrary
CCArray* bullte = weaPon->createNormalWeapon();
bullteArray = bullte;
}
CCLog("i=%d\n",i);
CCLog("count=%d\n",bullteArray->count());
CCSprite* bullte = (CCSprite*)bullteArray->objectAtIndex(i);

CCPoint playPo = player->getPosition();

int bx,by;
bx = playPo.x + player->getContentSize().width / 7;
by = playPo.y + player->getContentSize().height / 4;

bullte->setScale(0.2);

bullte->setPosition(ccp(bx,by));
bullte->setTag(1);
//this->addChild(bullte);

CCFiniteTimeAction* action = CCMoveTo::create(2,ccp(bx,y));
CCFiniteTimeAction* actionDone = CCCallFuncN::create(this,callfuncN_selector(GameLayer::runActionFiniched));
bullte->runAction(CCSequence::create(action,actionDone,NULL));

//this->addChild(bullte);
CCLog("count=%d\n",bullteArray->count());
i++;

}
这是cocos2d定时器的执行函数,当这个函数运行到执行到12次的时候就报错了,想了一个多钟头,发现了学习C++的一个盲点,分析了一下,当函数执行第11次的时候是没有问题的,此时生成了一个CCArray的指针,当运行到第12次的时候,因为第11次的CCArray是返回的局部指针,当运行完第11次的时候,系统回收了CCArray的内存,此时buttarray指向的是一个未定义的内存,肯定报错了,是一个野指针错误。记录下来,类似的错误别犯了!!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ 盲点 cocos2d
相关文章推荐