2017-05-18 8 views
-2

에 액세스하려고합니다. 3.15로 마이그레이션하려고하는 Cocos2d-x 3.14 프로젝트가 있는데, iOS에서는 완벽하게 작동하지만 Android에서는 그렇지 않습니다. 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가 발생합니다.

그 점에서 @ πάνταῥεῖ는 정확했으며, 'this'(게임 보드)는 그 시점에서 제대로 인스턴스화되지 않았지만 임의의 메모리를 가리키고있었습니다.