7
私はこのコードを64ビットvC++ 2005、32GBのWindows Server 2008 R2でコンパイルしています。 forループ内にアクセス違反があります。 [536870912]新しいダブルでも例外がない場合、特定の配列位置を超える割り当てを行う際64ビットシステムで4GB以上のメモリを割り当てる
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
double *x = new double[536870912];
cout << "memory allocated" << endl;
for(long int i = 0; i < 536870912; i++)
{
cout << i << endl;
x[i] = 0;
}
delete [] x;
return 0;
}
だから、なぜ私は、アクセス違反を取得していますか?
もう1つ言及しておきたいことは、このプログラムが別のコンピュータで正常にテストされたことです。
過剰なコミットが原因である可能性があります。 – syam
1つの問題は、64ビットWindowsでは 'long int'が32ビットなので、ループは決して終了しないということです。 'i'の型を' size_t'に変更して、どの配列のインデックスにも十分な大きさにする必要があります。しかし、それが唯一の問題かどうかはわかりません。 –
何百もの数字を印刷してアクセス違反があるので、制限に達していないようです。 – Jordi