Uruchomiłem ten kod, skompilowany na 64 bitach vC++ 2005, w systemie Windows Server 2008 R2 z 32 GB. W pętli for znajduje się naruszenie dostępu.Przydzielanie więcej niż 4 GB pamięci w 64-bitowym systemie
#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;
}
Więc jeśli nie ma wyjątku w nowy podwójny [536870912], dlaczego otrzymuję naruszenie zasad dostępu, gdy robi zadanie na określonej pozycji tablicy?
Warto również wspomnieć, że program ten został pomyślnie przetestowany na innym komputerze.
Nadmierne zaangażowanie może być również winne. – syam
Jednym z problemów jest to, że (jak sądzę) 'long int' to 32 bity w 64-bitowym systemie Windows, więc pętla nigdy się nie zakończy. Powinieneś zmienić typ 'i' na' size_t', aby mieć pewność, że jest wystarczająco duży dla dowolnego indeksu tablicy. Nie mam pojęcia, czy to jedyny problem. –
Chodzi o to, że wypisuje ponad sto liczb, a następnie jest naruszenie zasad dostępu, więc wydaje się, że nie osiąga limitu. – Jordi