-1

これは私が問題を抱えているビットコードです:

int pressedKey = event.getNativeKeyCode();

for (int i=0; i <= AllTriggerPads.size() ;i++) {
    if (AllTriggerPads[i]->get_key() == pressedKey){
        AllTriggerPads[i]->mBufferPlayerNode->start();
    }
}

エラーget_key()が発生しています。EXC_BAD_ACCESS (Code=1, ...)

参照に問題があるようです。mouseDown と fileDrop 関数でほぼ同じコードを使用しています。

for (int i=0; i < AllTriggerPads.size() ; i++) {

    if (AllTriggerPads[i]->mRect.contains(event.getPos())) {
        AllTriggerPads[i]->mBufferPlayerNode->start();
    }
}

これはうまくいきます!

すっごく、AllTriggerPads ベクトル (obj ポインターの) を正しく使用していないと思います。だから私は使用できますAllTriggerPads[i]->mRect.contains(event.getPos()) が、使用できませんAllTriggerPads[i]->get_key()AllTriggerPads[i]->key そして、試してみたところ、値自体にアクセスできAllTriggerPads.at(i)ませんでしたが、範囲外のエラーが発生し、さらに不思議になりました。

AlltriggerPads は次のように初期化されました vector<TriggerPad*> AllTriggerPads;

では、キー メンバーにアクセスするにはどうすればよいでしょうか。

4

2 に答える 2

1

存在しない配列要素にアクセスしようとしています。それがスローする理由EXC_BAD_ACCESSです。for ループの条件を次のように変更します。

for (int i = 0; i < AllTriggerPads.size(); ++i) {
    if (AllTriggerPads[i]->get_key() == pressedKey) {
        AllTriggerPads[i]->mBufferPlayerNode->start();
    }
}

またはC++11サポートが有効になっている場合は、次のように単純化します

for (auto i : AllTriggerPads) {
    if (i->get_key() == pressedKey) {
        i->mBufferPlayerNode->start();
    }
}
于 2015-06-30T17:41:41.263 に答える