C++ を使用して 2 人のプレイヤー間の従来のカード ゲームをシミュレートしています。「カード」構造を定義して、
card sample;
cout << sample.numb << " of " << sample.suit << " ownded by player " << sample.own
たとえば、「スペードの 10 はプレイヤー 2 が所有しています」と表示されます。
すべてのカードを追跡するベクトル「デッキ」(サイズ 40) を設定し、プレーヤー 1 の手札を処理するために、ゲームのすべてのステップでベクトル「g1」、「g2」、および「タブ」を動的に割り当てています。 、プレイヤー 2 の手札と、3 つのオブジェクトが分離されたテーブル上のカード (これは、ゲーム自体に必要なものです)。
プレイヤーはテーブルにカードを置き続け、新しいカードを獲得/喪失し続けるため、サイズが変化し続けるので、毎回次のようなことを行います:
delete g1;
delete g2;
delete tab;
n1=count (1,deck); // this counts how many cards in "deck" have .own field==1
n2=count (2,deck); // this counts how many cards in "deck" have .own field==2
nt=count (0,deck); // cards having .own field == 0 are on the table
g1 = new card [n1];
g2 = new card [n2];
tab = new card [nt];
k=0; // using this to move through the vectors I just re-allocated
for (i=0;i<40;i++) {
if(deck[i].own==1) {
g1[k]=deck[i];
k++;
}
}
// then I fill "g2" and "tab" pretty much in the same way
スクリプトはコンパイルおよび実行されますが、(正しく実行された) 数回のラウンドの後、「無効な次のサイズ (高速)」と segfault が発生します。周りを読んで、これは通常、何かを2回削除しようとしたときに発生することがわかりました。私のスクリプトは何も 2 回削除しませんが、このような new-delete-new の頻繁な使用は推奨されておらず、問題の原因である可能性があると思います。
考え?
編集 std::vector を使用して問題を解決しました。同じ問題を抱えている人には同じことをお勧めします。答えてくれたみんなに感謝します。
平和、
トム