4

配列にメモリを割り当てるために、次のコードを書きました。

try {
    int n = 0;
    cin >> n;
    double *temp = new double[n];
    ...
}
catch(exception& e) {
    cout << "Standard exception: " << e.what() << endl;
    exit(1);
}

もちろん、負の値などについて n をチェックしていますが、536*(10^6) を超える大きな数値を入力すると、不正な割り当て例外は発生しませんが、「無効な割り当てサイズ: 4294967295 バイト」クラッシュが発生します。

EG n = 536*(10^6) と入力 --> 不良割り当て例外 n = 537*(10^6) と入力 --> 無効な割り当てサイズ: 4294967295 バイト --> クラッシュ

なぜこれが起こっているのですか?

4

3 に答える 3

4

ビルドに Visual Studio を使用している場合は、リンカー設定で「大容量メモリ割り当て」を有効にすることができます。

プロジェクトのプロパティに移動 -> リンカー -> システム -> 「はい (/LARGEADDRESSAWARE)」に設定された大きなアドレスを有効にする

于 2014-05-05T10:26:21.403 に答える