0

私は、6つの一意の乱数1〜49を作成する乱数生成に取り組んできました.6つの乱数1〜49、または6つの一意の乱数がありますが、同時に上記のすべてではありません。コードをコンパイルすることはできますが、さまざまな場所で使用しようとするたびにクラッシュします% 49 +1

私が使用しているコードは次のとおりです。

{
                int numbers [SIZE];
                int i, j, n;

                srand (time(NULL));

                for (i = 0; i < SIZE; i++)
                    numbers[i] = i;

                for(i = 0; i < SIZE; i++)
                {
                j = rand() % 49 + 1;
                n = numbers[j];
                numbers[j] = numbers[i];
                numbers[i] = n;
                }

                for (i = 0; i < SIZE; i++)
                MyOutputDebugString ("%d\n", numbers[i]);

SIZE は 6 と定義されています。

ありがとう

4

2 に答える 2

5

SIZE は 6 と定義されています。

だから、あなたの配列numbers

int numbers [6];

一度

j = rand() % 49 + 1;

が実行され、j[ 1; の間になります。49 ] したがって、この行で > 5 の場合、範囲外の index::

n = numbers[j];
于 2012-08-16T14:35:18.197 に答える
0

エラーは、存在しない配列の一部を呼び出すことから発生しています。

n = numbers[j];

j の値は乱数になり、おそらく SIZE よりも大きくなります。

コードのこの部分を変更します。

                for (i = 0; i < SIZE; i++)                           
                    numbers[i] = i;

                for(i = 0; i < SIZE; i++)
                   {                       
                   j = rand() % 49 + 1; 
                   n = numbers[j];  
                   numbers[j] = numbers[i];
                   numbers[i] = n;
                   }

次のように、1 つのループで同じ効果を得ることができます。

for (i = 0; 1 < SIZE; i++)
{
   numbers[i] = rand() % 49 + 1;
}

これが役立つことを願っています。

于 2012-08-16T15:16:30.650 に答える