2017-05-18 2 views
-2

Ich habe ein Cocos2d-x 3,14-Projekt, das ich versuche, auf 3,15 zu migrieren, und es funktioniert perfekt für iOS, aber es funktioniert nicht für Android. 3.14 funktioniert gut auf beiden.Segfault beim Zugriff auf Header deklariert Mitglied

Wenn ich die migrierte Version 3.15 ausführe, erhalte ich einen segfault, wenn ich auf ein Mitglied zugreife, das in der Kopfzeile mit this -> member deklariert wurde. Wenn ich lokale Variablen hinzufüge, funktioniert es gut.

Hpp Datei:

class GameBoard : public Layer 
{ 
public: 

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

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

    ... 
} 

CPP-Datei:

void GameBoard::setupBackground() { 

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

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

Die Linie 'this-> Hintergrund' stürzt ab. Hat jemand eine Idee, warum das passieren könnte?

+0

Ich denke, es stürzt nicht auf diesem Hintergrund ab. Ich denke, es stürzt auf doStuff ab, die auf nicht initialisierten Hintergrund zugreifen könnte. – user1438832

+3

Zeigt 'this' zu diesem Zeitpunkt auf eine bestimmte instanziierte Instanz? –

+0

Oder rufst du 'GameBoard :: setupBackground' auf einem bereits gelöschten' GameBoard' Objekt an? – nakiya

Antwort

0

Es stellt sich heraus, dass in Cocos2d-x 3.15 (zumindest in unserem Projekt) die "applicationResized" -Funktion vor der Initialisierung der Szene aufgerufen wird. Fügen Sie das mit der Tatsache zusammen, dass keiner der Zeiger, die in den NULL-Überprüfungen in dieser applicationResized-Funktion verwandt werden, tatsächlich als NULL initialisiert wurde, das falsch verursachte, wenn Überprüfungen ausgeführt werden.

In diesem Sinne war @ πάνταῥεῖ korrekt, 'dieses' (das GameBoard) wurde zu diesem Zeitpunkt nicht richtig instanziiert, sondern zeigte auf zufälligen Speicher.

Verwandte Themen