这是我的代码:
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();
上,&#34; EXC_BAD_ACCESS&#34; occoured。
之后我找到了解决办法:
class item {
public:
void expMethod();
SItemSelector itemSelector_;
SItemSelector itemSelector2_; // work around
UILayerButton* startBtn_;
};
然后一切顺利......我只是不知道发生了什么,但callMethodB()
只是一个空洞的方法,与它没有任何关系。
我正在使用Apple LLVM 3.1,默认设置。
更新:修正了我的代码。
答案 0 :(得分:2)
在此代码中:
for (i = 0; i < 3; i++) {
itemSelector_.pItems[i] = new ItemSelectFrame();
}
您正在撰写itemSelector_.pItems
的末尾,因为pItems
是一个长度为2
的数组,但您正在编写3
个元素。
然后覆盖startBtn_
恰好出现在内存itemSelector_
之后的startBtn_
。这可以解释当您随后阅读已损坏的pItems
时的错误。
更改循环终止测试,或增加{{1}}的长度。我不知道哪一个是正确的解决方案,但显然你会知道。