2017-05-18 2 views
-2

私は3.15に移行しようとしているCocos2d-x 3.14プロジェクトを持っていますが、これはiOSでも完璧に機能します。 3.14両方でうまく動作します。Segfaultが宣言されたメンバーのヘッダにアクセスしようとしています

移行されたバージョン3.15を実行しているとき、this-> memberを使用してヘッダーで宣言されたメンバーにアクセスするとsegfaultが発生します。ローカル変数を追加するとうまく動作します。

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->背景' クラッシュしました。なぜこのようなことが起こるのか誰にも分かりますか?

+0

私はこれがバックグラウンドでクラッシュしないと思います。初期化されていないバックグラウンドにアクセスする可能性のあるdoStuffでクラッシュしているようです。 – user1438832

+3

'this'はその時点でインスタンス化されたインスタンスを指していますか? –

+0

または、既に削除された 'GameBoard'オブジェクトで' GameBoard :: setupBackground'を呼び出していますか? – nakiya

答えて

0

Cocos2d-x 3.15(少なくとも私たちのプロジェクトでは)シーンの初期化の前に 'applicationResized'関数が呼び出されていることが分かります。これをまとめると、このapplicationResized関数のNULLチェックで使用されているポインタは、実際にはNULLとして初期化されていないため、チェックが合格するとfalseになります。

この意味で@πάνταῥεῖは正しかった。「この(ゲームボード)はその時点で正しくインスタンス化されていないが、ランダムなメモリを指していた。

関連する問題