【发布时间】:2014-08-12 17:33:46
【问题描述】:
我遇到了一个……有趣的问题。我发现我的程序在标准 get 语句上崩溃了。对于上下文,我将覆盖 onEnter 函数(来自 Cocos2dx 框架)以在进一步场景中修改后交换图像。
我的修改如下:
图标是map< ClassA, CCSprite* >
current 属于ClassA
void onEnter(){
<parent class>::onEnter();
CCSprite* sprite = icons[current];
if (sprite){
CCNode* parent = sprite->getParent(); //Crashes Here
if (parent){...}
}
}
来自 Cocos2d-x:
CCNode* getParent(){
return m_pParent;
}
注意:除了在这里之外,我在其他任何地方调用此函数都没有问题。
还有:
是的,图标存在
是的,当前存在
是的,精灵存在
当前不是指针
如果有帮助,我正在使用 QNX Momentics IDE。
编辑:: 这是一张图片
【问题讨论】:
-
我的猜测是
sprite是nullptr并因此取消引用空指针,或者由于您相对确定它不是,它可能是delete'd 但未设置到nullptr,所以它包含垃圾。或者icons数组中的索引从未正确设置,因此它只是在初始化时在该内存位置有任何废话。 -
@Cyber:由于图标的值和它的内容在场景之间没有被修改,所以它不可能被删除。我还检查了空值。我还预先设置了所有值(在构造函数中),所以我也以某种方式怀疑废话部分。我会看看它是否是一个有效的 CCSprite?
-
请记住,C++ 没有内存安全性。可能有一些其他代码覆盖了
icons的一部分,因此sprite指向了错误的地方。 -
如果这是在调试或发布版本中?如果它是发布版本(或者如果启用了优化),那么调试器可能会在崩溃实际发生的位置向您撒谎。坠机地点的拆解是什么样子的?拆解永远不会说谎。
标签: c++ cocos2d-x cocos2d-x-2.x