【发布时间】:2017-05-18 07:07:20
【问题描述】:
我有一个 Cocos2d-x 3.14 项目,我正在尝试迁移到 3.15,它适用于 iOS,但不适用于 Android。 3.14 两者都可以正常工作。
在运行 3.15 迁移版本时,在访问使用 this->member 在标头中声明的成员时出现段错误。如果我添加局部变量,它工作正常。
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”行崩溃。有谁知道为什么会发生这种情况?
【问题讨论】:
-
我认为它没有在 this->background 上崩溃。我猜它在 doStuff 上崩溃了,它可能会访问未初始化的背景。
-
当时
this是否指向某个正确实例化的实例? -
或者,您是否在已删除的
GameBoard对象上调用GameBoard::setupBackground? -
@user1438832 它专门在那条线上崩溃了。该引擎允许您使用函数 Sprite::create("mySprite.png"); 初始化未初始化的精灵指针。通过一些额外的测试,它仅在检查 null 的成员变量上崩溃。
-
@πάνταῥεῖ 通常 cocos2d-x 管理 GameBoard 类的初始化。 'this' 绝对不是 NULL。但是您确实给了我在示例项目(仅使用局部变量)中尝试相同操作(访问成员)的想法
标签: android c++ cocos2d-x cocos2d-x-3.0