0

这是我的代码:

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,默认设置。

更新:修复了我的代码。

4

1 回答 1

2

在这段代码中:

for (i = 0; i < 3; i++) {
  itemSelector_.pItems[i] = new ItemSelectFrame();
}

你正在写结束,itemSelector_.pItems因为pItems是一个长度数组,2但你正在写3元素。

然后覆盖startBtn_恰好出现itemSelector_在内存中的那个。当您随后阅读 now corrupted 时,这就解释了错误startBtn_

要么改变你的循环终止测试,要么增加pItems. 我不知道哪个是正确的解决方案,但很明显你会知道的。

于 2012-04-28T13:43:24.440 回答