Android 尝试访问标头声明的成员时出现SEGFULT
我有一个Cocos2d-X3.14项目,我正在尝试将其迁移到3.15,它在iOS上运行得非常好,但在Android上却不行。3.14在这两个方面都很好 在运行3.15迁移版本时,当使用this->member访问标头中声明的成员时,我会遇到一个segfault。如果我添加局部变量,它就可以正常工作 Hpp文件:Android 尝试访问标头声明的成员时出现SEGFULT,android,c++,cocos2d-x,cocos2d-x-3.0,Android,C++,Cocos2d X,Cocos2d X 3.0,我有一个Cocos2d-X3.14项目,我正在尝试将其迁移到3.15,它在iOS上运行得非常好,但在Android上却不行。3.14在这两个方面都很好 在运行3.15迁移版本时,当使用this->member访问标头中声明的成员时,我会遇到一个segfault。如果我添加局部变量,它就可以正常工作 Hpp文件: class GameBoard : public Layer { public: static cocos2d::Scene* createScene(); virtu
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检查中使用的指针实际上都没有初始化为NULL,这会导致通过false检查
从这个意义上讲,@πάνταῥεῖ 是正确的,'这'(游戏板)当时没有正确实例化,但指向随机内存。我认为它没有在这个->背景上崩溃。我猜它是在doStuff上崩溃,可能会访问未初始化的背景。
这
是在那个时候指向某个适当实例化的实例吗?或者,您正在对已删除的GameBoard
对象调用GameBoard::setupBackground
吗?@user1438832该行正在崩溃。引擎允许您使用函数sprite::create(“mySprite.png”)初始化未初始化的sprite指针;通过一些额外的测试,它完全崩溃在被检查为null的成员变量上。@πάνταῥεῖ 通常,cocos2d-x管理GameBoard类的初始化。“this”绝对不是空的。但您确实给了我在示例项目中尝试相同操作(访问成员)的想法(仅使用局部变量)