2

C++ で 500 万の異なる乱数を生成するプログラムを作成しようとしています。以下はコードです:

#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;

int main() {
    unsigned before = clock();
    srand(time(NULL));
    long numbers[5000000];
    for (int i = 0; i < 5000000; i++)
        numbers[i] = rand() % 5000000;
    for (int i = 0; i < 5; i++)
        cout<<numbers[i]<<endl;
    cout<<clock() - before<<endl;
    return 0;
}

実行するたびに何も起こらず、プログラムがクラッシュします。コードがとても単純なので、私が間違っていることを見つけることができないようです。誰か助けてくれませんか?ありがとうございました。

4

2 に答える 2

4
long numbers[5000000];

500 万 *sizeof(long)バイトのスタックを割り当てようとします。これはほぼ確実にオーバーフローします。

変数を移動して、代わりに静的な期間を持つことができます

static long numbers[5000000];

または、動的に割り当てることができます

long* numbers = new long[5000000];
// calculations as before
delete [] long;
于 2013-10-11T23:18:19.410 に答える