Ich verwende diesen Code, kompiliert auf 64 Bit VC++ 2005, auf Windows Server 2008 R2 mit 32 GB. Es gibt eine Zugriffsverletzung innerhalb der for-Schleife.Zuweisung von mehr als 4 GB Speicher in einem 64-Bit-System
#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;
}
Also, wenn es keine Ausnahme in neue Doppeln [536870912], warum bin ich eine Zugriffsverletzung bekommen, wenn eine Zuweisung über eine bestimmte Feldposition zu tun?
Ein weiterer erwähnenswerter Punkt ist, dass dieses Programm erfolgreich auf einem anderen Computer getestet wurde.
Übermäßiges Begehen könnte der Schuldige sein. – syam
Ein Problem ist, dass (glaube ich) 'long int' 32 Bit auf 64-Bit-Windows ist, so dass die Schleife niemals enden wird. Sie sollten den Typ von "i" in "size_t" ändern, um sicherzustellen, dass er für jeden Array-Index groß genug ist. Ich habe keine Ahnung, ob das das einzige Problem ist. –
Die Sache ist, dass es über hundert Zahlen ausdruckt, und dann gibt es eine Zugriffsverletzung, so scheint es, dass es das Limit nicht erreicht. – Jordi