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

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,盲点)