这是我的代码:
typedef struct TItemSelector{
ItemSelectFrame* pItems[2];
} SItemSelector;
class item {
public:
void expMethod();
SItemSelector itemSelector_;
UILayerButton* startBtn_;
};
void item::expMethod(){
startBtn_ = new UILayerButton();
for (i = 0; i < 3; i++) {
itemSelector_.pItems[i] = new ItemSelectFrame();
}
startBtn_->callMethodA();
}
void UILayerButton::callMethodA()
{
this->callMethodB();
}
void UILayerButton::callMethodB()
{
}
在
this->callMethodB();
上,出现“ EXC_BAD_ACCESS”。之后,我找到了解决方法:
class item {
public:
void expMethod();
SItemSelector itemSelector_;
SItemSelector itemSelector2_; // work around
UILayerButton* startBtn_;
};
然后一切顺利...我只是不知道发生了什么,但是
callMethodB()
只是一个空方法,与它无关。我使用的是Apple LLVM 3.1,默认设置。
更新:修复了我的代码。
最佳答案
在此代码中:
for (i = 0; i < 3; i++) {
itemSelector_.pItems[i] = new ItemSelectFrame();
}
您正在写
itemSelector_.pItems
的末尾,因为pItems
是长度为2
的数组,但是您正在写3
元素。然后,这将覆盖
startBtn_
,后者恰好出现在内存中的itemSelector_
之后。当您随后读取已损坏的startBtn_
时,这将解释该错误。更改循环终止测试,或增加
pItems
的长度。我无法确定哪一个是正确的解决方案,但显然您会知道的。关于c++ - 奇怪的错误:我类的EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10363767/