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()、空のメソッドであり、それとは何の関係もありません。

デフォルト設定のAppleLLVM3.1を使用しています。

更新:私のコードを修正しました。

4

1 に答える 1

2

このコードでは:

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

は長さの配列であるitemSelector_.pItemsため、の終わりに書き込んでいますが、要素を書き込んでいます。pItems23

次に、メモリ内のstartBtn_直後に表示されるものを上書きitemSelector_します。そして、それはあなたが後で今壊れているを読んだときのエラーを説明しますstartBtn_

ループ終了テストを変更するか、の長さを増やしてくださいpItems。どちらが正しい解決策かはわかりませんが、明らかにわかります。

于 2012-04-28T13:43:24.440 に答える