尝试访问标头声明的成员时的Segfault

时间:2017-05-18 07:07:21

标签: android c++ cocos2d-x cocos2d-x-3.0

我有一个Cocos2d-x 3.14项目,我正在尝试迁移到3.15,它适用于iOS,但它不适用于Android。 3.14在两者上都可以正常工作。

运行3.15迁移版本时,在使用this->成员访问标题中声明的成员时,会出现段错误。如果我添加局部变量,它可以正常工作。

Hpp文件:

class GameBoard : public Layer
{
public:

    static cocos2d::Scene* createScene();
    virtual bool init();
    CREATE_FUNC(GameBoard);

    // background
    Sprite* background;
    void setupBackGround();

    ...
}

Cpp文件:

void GameBoard::setupBackground() {

    cocos2d::Size visibleSize = Director::getInstance()->getVisibleSize();
    Vec2 origin = Director::getInstance()->getVisibleOrigin();

    if (this->background == NULL) {
         doStuff();
    }
}

'this-> background'一行崩溃了。有谁知道为什么会发生这种情况?

1 个答案:

答案 0 :(得分:0)

事实证明,在Cocos2d-x 3.15中(至少在我们的项目中),在场景初始化之前调用'applicationResized'函数。把这个放在一起这样一个事实,即在这个applicationResized函数中的NULL检查中使用的指针都没有实际初始化为NULL,如果检查通过则导致错误。

从这个意义上来说,@πάνταῥεῖ是正确的,'this'(GameBoard)在那时没有被正确地实例化,而是指向随机记忆。