我正在运行这段代码,它是在64位VC++ 2005上编译的,在安装有32GB内存的Windows Server 2008 R2上运行。在循环中出现了访问冲突。
#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;
}
如果在new double[536870912]中没有异常,为什么在对特定数组位置进行赋值时会出现访问冲突?
另一个值得一提的点是该程序在另一台电脑上已经成功测试过。
long int
是32位的,所以循环永远不会终止。你应该将i
的类型更改为size_t
,以确保它足够大来表示任何数组索引。虽然我不知道这是唯一的问题。 - Mike Seymour4GB
连续块。 - Kirk Backus536870912 * sizeof(double)
让我得到了 0。看起来是operator new
内部有一次溢出了。 - jrok