1

だから基本的に私はそのCardように初期化されたオブジェクトの配列を持っています...

Card *pile[MAX];

MAX52 です。この配列は、と呼ばれるクラスのメンバーです。CardPile

私が抱えている問題は、for ループを使用して、 CardPilecalledのインスタンスをdrawPile52 要素の容量まで満たそうとしたときに発生します...
これが私が選択した方法です。

char faces[] = "A23456789TJQK";
char suits[] = "SHDC";
int k = 0;
for(int i=0; i<13; i++){
    for(int j=0; j<4; j++){
        drawPile.add(new Card(faces[i], suits[j]));
        //the line below is displayed on the console for debugging purposes
        cout << drawPile.pile[k]->face << drawPile.pile[k]->suit <<  ", pile size=" << drawPile.size << endl;
        k++;
    }
}

メソッドのコードは次の.add(Card*)とおりです...

void CardPile::add(Card *c){
    for(int i=0; i<52;i++){
        if(pile[i]){
            continue;
        } else {
            this->pile[i]=c;
            size++;
            break;
        }
    }
}

...そして、プログラムを実行すると、これがコンソールに表示されます...

AS, pile size=1
AH, pile size=2
AD, pile size=3
AC, pile size=4
2S, pile size=5
2H, pile size=6
2D, pile size=7
2C, pile size=8
3S, pile size=9
3H, pile size=10
3D, pile size=11
3C, pile size=12
4S, pile size=13
4H, pile size=14
4D, pile size=15
4C, pile size=16
5S, pile size=17
5H, pile size=18
5D, pile size=19
5C, pile size=20
6S, pile size=21
6H, pile size=22
6D, pile size=23
6C, pile size=24
7S, pile size=25
7H, pile size=26
7D, pile size=27
7C, pile size=28
8S, pile size=29
8H, pile size=30
8D, pile size=31
8C, pile size=32
9S, pile size=33
9H, pile size=34
9D, pile size=35
9C, pile size=36
TS, pile size=37
TH, pile size=38
TD, pile size=39

add()出力の最後の行の後、プログラムは実行を停止します...私の質問は、配列を割り当てられた容量まで終了して埋めるのではなく、39回目の呼び出しの後にプログラムが停止するのはなぜですか?

前もって感謝します

4

1 に答える 1

0

杭要素を初期化する必要があります。デフォルトはランダムな値です:

Card *pile[52] = {};

また、生のポインタを持つ配列の代わりにstd::vectorを使用することもできます

std::vector<Card> cards;
于 2013-01-31T03:13:21.347 に答える