使用CCMutableArray的错误

我在CCLayer的继承类里定义了一个CCMutableArray的成员对象,在该类的touchEnd事件中向 CCMutableArray 添加一个sprite。代码片段如下:
SpriteMoveLayer::SpriteMoveLayer(void)
{
cakes=new CCMutableArray<CCObject*>(10);
cakes->autorelease();
}
-----
void SpriteMoveLayer::ccTouchesEnded(CCSet* set,CCEvent* event){
CCSprite* testS=CCSprite::spriteWithFile(“ball.png”);
cakes->addObject(testS );
}

在执行到cakes->addObject( testS );时,会报错,弹出窗口内容:

MyTest2.exe 中的 0x00c559da (msvcr100d.dll) 处有未经处理的异常: 0xC0000005: 读取位置 0xcdcdcdc1 时发生访问冲突
中段后,vs2010会打开一个cpp文件Microsoft Visual Studio 10.0VCcrtsrcdbgdel.cpp,定位到下面这一行:
/* verify block type */
_ASSERTE(_BLOCK_TYPE_IS_VALID(pHead->nBlockUse));

我把代码稍作修改,改为
void SpriteMoveLayer::ccTouchesEnded(CCSet* set,CCEvent* event){
cakes=new CCMutableArray<CCObject*>(10);
cakes->autorelease();

	CCSprite* testS=CCSprite::spriteWithFile("ball.png");
	cakes->addObject( testS );

}

就不报错了,好奇怪啊。。。。

  • 本帖最后由 andyque 于 2012-4-15 22:04 编辑 *

priteMoveLayer::SpriteMoveLayer(void)
{
cakes=new CCMutableArray<CCObject*>(10);
cakes->autorelease();
}
这里cakes在函数结束的时候,内存就被释放掉了,你再在touchesEnded里面访问时内存已经释放了

改成下面这样,程序通过:
SpriteMoveLayer::SpriteMoveLayer(void):mouse_nums(0),cakes(new CCMutableArray<CCObject*>(10))
{
}

SpriteMoveLayer::~SpriteMoveLayer(void)
{
cakes->release();
}

嗯,自动释放的问题。我也抓狂了下下,后来还是自己管理释放,想啥时候释放就啥时候。

  • 本帖最后由 andyque 于 2012-4-15 22:04 编辑 *

priteMoveLayer::SpriteMoveLayer(void)
{
cakes=new CCMutableArray<CCObject*>(10);
cakes->autorelease();
}
这里cakes在函数结束的时候,内存就被释放掉了,你再在touchesEnded里面访问时内存已经释放了

嗯,自动释放的问题。我也抓狂了下下,后来还是自己管理释放,想啥时候释放就啥时候。