Hero与Sprite 释放后一个为45464554一个为null问题

我写了一个Hero类

class Hero:public cocostudio::Armature{
public:
Hero();
~Hero();
static Hero*create();
virtual bool init();
//CREATE_FUNC(Hero);
private:
};

Hero *Hero::create(){
Hero *sprite = new Hero();
if (sprite && sprite->init())
{
sprite->autorelease();
return sprite;
}
CC_SAFE_DELETE(sprite);
return nullptr;
}

bool Hero::init(){
ArmatureDataManager::getInstance()->addArmatureFileInfo(“p1.ExportJson”);
if (!Armature::init(“p1”)) {
return false;
}
ArmatureDataManager::getInstance()->removeArmatureFileInfo(“p1.ExportJson”);
return true;
}

remove掉hero后 下一帧:
cocos2d: 析构
cocos2d: hero -536870912
cocos2d: sp null
这里的sp 是
Sprite *sp=Sprite::create();
addChild(sp);
removeChild(sp);

我的问题是 为什么Hero类的对象 释放后 计数为-536870912 不为null 但它的引用计数为0
sp 这个Sprite类的对象 却为null 被完全释放掉了

我可能理解不到位。
指针是可以整型用的,null其实就是0值(有些是-1啊哈),但要把nullptr与null区别开(看c++11的文档吧)。
如:
int sp=(int)Sprite::create();
addChild((Sprite*)sp);
removeChild((Sprite*)sp);
((Sprite*)sp)->setTag(sp);
那么好了,来处理下
int b = new int(5);
int a = &b;
function(a);
delete b;
至此a还是指向b地址的值,除非你给a赋值a = null

一些个人理解,丢弃c++2年多,最近才捡起来。

在function里边可以改变a值,需要传地址过去,堆栈的计算来返回上一步貌似不可以,跳过下一步倒是可以。

我现在的疑惑是 为什么继承自cocostudio::Armature的hero对象 没有释放掉

sorry,没看清楚。
bool Hero::init(){
ArmatureDataManager::getInstance()->addArmatureFileInfo(“p1.ExportJson”);
if (!Armature::init(“p1”)) {
return false;
}
ArmatureDataManager::getInstance()->removeArmatureFileInfo(“p1.ExportJson”);
return true;
}
是不是应该在return false的时候也删除一下?p1?
引用计数的话看Object,在构造函数的时候赋值为1了。RC2没看就不太清楚。

应用计数只有+和–赋值,而且是无符号类型。

是的 我怀疑hero对象的内存已经被释放掉了 hero这个全局变量估计变成了野指针 所以计数才会爆掉

被释放掉你怎么取计数?

野指针 随机指向了某地