C++ CCArray指针变为无效,并以某种方式再次变为有效

C++ CCArray指针变为无效,并以某种方式再次变为有效,c++,memory-management,cocos2d-iphone,cocos2d-x,C++,Memory Management,Cocos2d Iphone,Cocos2d X,更新(已解决。更多信息在末尾)。 我正在使用CCArray存储CCSprite指针。首先,我调用highlightPoints(),在其中初始化并保留CCArray。然后,调用ontouchsmoved,其中spriteArr返回null并且不满足if条件。但是,稍后当我调用removePoints(),spriteArr会记住之前添加的所有ccsprite,我可以将它们从层中删除。我完全搞不懂为什么会这样 代码 void Structure::highlightPoints() { s

更新(已解决。更多信息在末尾)。

我正在使用
CCArray
存储
CCSprite
指针。首先,我调用
highlightPoints()
,在其中初始化并保留
CCArray
。然后,调用
ontouchsmoved
,其中
spriteArr
返回null并且不满足
if
条件。但是,稍后当我调用
removePoints()
spriteArr
会记住之前添加的所有ccsprite,我可以将它们从层中删除。我完全搞不懂为什么会这样

代码

void Structure::highlightPoints() {
    spriteArr = CCArray::createWithCapacity(mScreenVertices.size());
    spriteArr->retain();
    for( int index = 0; index < mScreenVertices.size(); index++) {

        CCSprite *vertex = CCSprite::create("reticle.png");
        vertex->setPosition(ccp(mScreenVertices.at(index).GetX(), mScreenVertices.at(index).GetY()));

        addChild(vertex);
        spriteArr->addObject(vertex);
    }
}

void Structure::onTouchesMoved(cocos2d::CCPoint position) {
    if(spriteArr) {//false
            for( int index = 0; index < spriteArr->count(); index++) {
                ((CCNode*)spriteArr->objectAtIndex(index))->setPosition(ccp(mScreenVertices.at(index).GetX(), mScreenVertices.at(index).GetY()));
            }
        }
}
void Structure::removePoints() {
    if(spriteArr) {  
        for( int index = 0; index < spriteArr->count(); index++) {
            removeChild((CCNode*)spriteArr->objectAtIndex(index), true);    
        }
    }

}
void结构::highlightPoints(){
spriteArr=CCArray::createWithCapacity(mScreenVertices.size());
spriteArr->retain();
对于(int index=0;index设置位置(ccp(mscreentvertices.at(index.GetX(),mscreentvertices.at(index.GetY()));
addChild(顶点);
spriteArr->addObject(顶点);
}
}
空洞结构::OnTouchMoved(cocos2d::CCPoint位置){
if(spriteArr){//false
对于(int index=0;indexcount();index++){
((CCNode*)spriteArr->objectAtIndex(index))->setPosition(ccp(mScreenVertices.at(index.GetX(),mScreenVertices.at(index.GetY()));
}
}
}
void结构::removePoints(){
if(spriteArr){
对于(int index=0;indexcount();index++){
removeChild((CCNode*)spriteArr->objectAtIndex(index),true;
}
}
}
已解决


我相信我使用派生类对象调用了
highlightPoints()
removePoints()
,使用基类对象调用了
onTouchesMoved()
。由于“切片”错误,派生类成员无法读取。

可能是不同的结构对象?例如,在第一个对象中填充spriteArr,然后在另一个对象中接收OnTouchsMoved。在这两个对象的
OntouchsMoved()
中,我得到的指针无效。您确定调用了该对象的OntouchsMoved吗?