尝试访问 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)当时没有正确实例化,而是指向随机内存。
我有一个 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)当时没有正确实例化,而是指向随机内存。