OnExit和autorelease 出现问题,小白求大神回答。

刚开始学cocos2dx,现在写一个类似坦克大战的游戏,遇到了一些很棘手的问题,希望有大神帮我看看,感激不尽。

第一个问题:

Bullet * Bullet::createBulletWithTank(NewTank* tank)
{
auto * bullet = new Bullet();
CCSpriteBatchNode* spriteTexture = CCSpriteBatchNode::create(“bullet.png”);
bullet = (Bullet *)CCSprite::createWithTexture(spriteTexture->getTexture());
bullet->initBullettWithTank(tank);
bullet->autorelease();

return bullet;

}

一个很简单的创建一个子弹,但是运行之后出现断点,提示
Assert: Node still marked as running on node destruction! Was base class onExit() called in derived class onExit() implementations?

百度后发现是OnExit()函数的问题,可是我在整个程序中并没有重载OnExit()函数,所以不知道是什么问题。
但是注释掉bullet->autorelease(); 之后就不在本问题。

第二个问题:

我创建了一个Tank类型用来创建我的主角,在重载的create方法里就会调用子弹的create方法(如上方法,注释掉bullet->autorelease()后)来创建一个属于这个Tank的子弹。
然后我又创建了一个Enemy类型继承于Tank类型,创建这个实例时出现异常Unhandled exception at 07580C42D in MyCppGame.exe:Microsoft C++ exception:std::bad_alloc atmemory location 00050E474
更奇怪的是 在重新生成解决方案的第一次运行当中没有任何问题,之后的运行都会弹出以上错误。

我对cocos2dx的内存机制很不熟悉,希望有大神能指点一下,真心感谢。

求大神出现

我也新手,一起探讨下:
1 第一个问题可能是由于你手动释放bullet引起的。在加入autorelease以后,你就不用管释放的问题了,引擎会帮你处理
2 bullet的create方法,我一般不这么写,一般都是调用CREATE_FUN(TYPE)这个宏,然后再初始化中来初始化图片

第二个问题应该是由于你没有释放内存引起的,因为你new了,没有delete

新手还是建议用autorelease吧