0

私はC++でダイスゲームを作っていますが、私のプログラムにはいくつかの配列があります。

die[5] = { (rand()%6)+1, (rand()%6)+1, (rand()%6)+1, (rand()%6)+1, (rand()%6)+1 };

そして、私はアレイを使用します

cout<<"First die: "<< die[0] <<"\n"

しかし、プログラムを実行すると、最後の配列は常に0を出力しますが、これを修正する方法はありますか?

4

2 に答える 2

6

あなたは実際には多くの情報を提供していませんが、ここに私の推測があります:

  • あなたは行き​​過ぎです。配列の最後のスポットはdie[4]であり、die [5]を使用している可能性があります。これは、想定外のメモリにアクセスしていることを意味します。一部のシステムでは、これは自動的に「0」として初期化されます。

サイズNの配列には、常に0からN-1の範囲のN個の要素が含まれます。array [N]を使用すると、配列の範囲を超えてメモリにアクセスします。これは、未使用のメモリ(最良の場合)または他の何かに割り当てられたメモリである可能性があります。結果はトラブルです。こんなことしないで。

于 2012-11-19T10:04:15.323 に答える
0

コードには次の行があります。

54.  cout<<"Sixth die: " << die[5] <<"\n";

ダイには5つの要素しかないため、これは無効なアクセスです。したがって、0から4が有​​効なインデックスです。

これは実際には「未定義動作」です。プログラムはコアダンプ/アクセス違反を与える可能性がありますが、そうする必要はありません。代わりに、乱数またはゼロを出力することができます...

于 2012-11-19T10:06:42.213 に答える