求助,遇到一个奇怪的问题

初学 cocos2dx,在写一个卡牌游戏的时候,遇到下面这个问题,

游戏有两个层,GameLayer 和 pokerLayer,其中 pokerLayer 作为成员变量,添加到 gameLayer 层里,pokerLayer里通过游戏逻辑,生成 poker 对象,然后通过 this->addChild(poker),添加到 pokerLayer 层上,poker 对象继承 CCNode,有点数,花色,名称,精灵图片等变量,

现在问题是,在 pokerLayer 里生成 poker 对象的时候,名称变量有值,但在 GameLayer 的触摸方法 CCTouchEnded 里,取到这个对象的时候,名称变量就没值了,对象不为空,而且通过控制台打印,其他变量,如点数有值,

GameLayer触摸代码如下:

void GameLayer::ccTouchEnded(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent){
    //Poker* poker = (Poker*)this->pokerLayer->getChildByTag(100000);

    CCLog("桌面牌数量: %d",this->pokerLayer->deskPokerPool->count());
    CCObject* poker;
    CCARRAY_FOREACH(this->pokerLayer->deskPokerPool, poker){
        

        CCRect pokerRect = ((Poker*)poker)->boundingBox();
        pokerRect.origin.x -= 15;
        pokerRect.origin.y -= 15;
        pokerRect.size.width += 30;
        pokerRect.size.height += 30;
        
        //=====================这个时候 poker 就没有值

        CCLog("Game层触摸捕捉时扑克名称: %s",((Poker*)poker)->pokerName->getCString());
        CCLog("Game层触摸捕捉时扑克点: %d",((Poker*)poker)->pokerPoint);
        
        if (pokerRect.containsPoint(this->convertTouchToNodeSpace(pTouch))){
            CCLog("点中扑克");
            this->pokerLayer->pokerRotate(((Poker*)poker));
        }else{
            CCLog("没点中扑克");
        }
 
    }
    
    
}


```

pokerLayer 层的部分代码如下:
//游戏开始时,发牌初始化
void PokerLayer::dealStartPokers(int peopleQuantity){
    //用于保存桌面最上层上的扑克牌
    deskPokerPool = CCArray::createWithCapacity(peopleQuantity);
    deskPokerPool->retain();
    Poker* poker = this->dealPoker();
    //CCSize winSize = CCDirector::sharedDirector()->getWinSize();
    
    poker->setPosition(ccp(750,550));
    poker->setScale(1.5);       //缩放扑克精灵图片
    this->addChild(poker,0,100000);
    
    //====================这个时候poker 的名称属性有值


    CCLog("发牌时扑克名称: %s",((Poker*)poker)->pokerName->getCString());
    

    pokerPool->removeObject(poker); //每发一张牌,要从牌池中去掉
    deskPokerPool->addObject(poker);//将发出的牌添加进桌面牌池
    
    CCObject* pokeTemp;
    CCARRAY_FOREACH(deskPokerPool, pokeTemp){
        
        
        CCRect pokerRect = ((Poker*)pokeTemp)->boundingBox();
        pokerRect.origin.x -= 15;
        pokerRect.origin.y -= 15;
        pokerRect.size.width += 30;
        pokerRect.size.height += 30;
        
        if(NULL != pokeTemp){
            CCLog("发牌循环扑克不为空");
            CCLog("发牌循环时扑克名称: %s",((Poker*)pokeTemp)->pokerName->getCString());
            CCLog("发牌循环时扑克点: %d",((Poker*)pokeTemp)->pokerPoint);
        }else{
            CCLog("发牌循环扑克为空");
        }

    }
  
    
}



```

(Poker*)poker)->pokerName->getCString()
从这里看你的pokerName是CCString类型的,pokerName是否retain过,如果没有,就是已经被释放了