尝试访问 header 声明的成员时出现段错误

Segfault when trying to access header declared member

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

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

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' 行崩溃。有谁知道为什么会发生这种情况?

原来在 Cocos2d-x 3.15 中(至少在我们的项目中)在场景初始化之前调用了 'applicationResized' 函数。将此与此 applicationResized 函数中 NULL 检查中使用的指针 none 实际上初始化为 NULL,如果检查通过则导致错误。

从这个意义上说,@πìνταῥεῖ 是正确的,'this'(GameBoard)当时没有正确实例化,而是指向随机内存。