0

わかりましたので、5 枚のカードのポーカー ハンドから最高の非ペア カードを返す単純な関数があります。しかし、私が抱えている彼の問題は奇妙です。ランダムに発生するこのランダム バス エラーがあり、その理由はわかりません。使用していた印刷ステートメントだと思いましたが、今はわかりません。ごちゃごちゃしているように見えますが、「テスト印刷」という言葉を出力する下の行を見てください。この行の直後にバスエラーが発生し、2番目の「テスト印刷」に到達しない理由を誰か教えてください。 " 声明。プログラムのメモリが不足している可能性がありますか??? それはおそらく意味がありませんが、他に何も考えられません (少し紛らわしいコードを除外してください):

int Hand::highestNonPair(int *face_array_exclude, int size)
{
    int highest = 0;
    int contains_excludable = 0;
    int i = 0;

    if(this->hasAnother(i) == false)
            highest = cards[i]->getFace();


    for(i= 0;i<cards.size();i++)
    {
        if((cards[i+1]->getFace() > cards[i]->getFace()) &&
        (this->hasAnother(i) == false)){
            if(size>0){
                for(int c = 0;c<size;c++){
                    if(cards[i]->getFace() == face_array_exclude[c])
                            contains_excludable = 1;
                    }
             }

                 if(!contains_excludable)
            highest = cards[i+1]->getFace();

        cout<<\nTEST PRINT"<<endl;
        contains_excludable = 0;
        cout<<\nTEST PRINT"<<endl;
        }
    }

    return highest;
}
4

1 に答える 1

3

このビットは、次のような問題を引き起こす可能性があります。

if((cards[i+1]->getFace() > cards[i]->getFace()) &&

の最高値iとしてcards.size() - 1. これはcards[i+1、無効なエントリになることを意味します。

ループを変更します。

for(i= 0;i<cards.size();i++)

for(i= 0;i<cards.size() - 1;i++)

多分

于 2013-02-28T18:15:45.750 に答える