Я запускаю этот код, скомпилированный на 64-битном vC++ 2005, на Windows Server 2008 R2 с 32 ГБ. Внутри цикла for есть нарушение доступа.Выделение памяти более чем на 4 ГБ в 64-битной системе
#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;
}
Так что, если не является исключением в новом двойной [536870912], почему я получаю нарушение прав доступа при выполнении задания на определенную позицию массива?
Еще один момент, который стоит упомянуть, заключается в том, что эта программа была успешно протестирована на другом компьютере.
Преступлением вполне может быть преступник. – syam
Одна из проблем заключается в том, что (я думаю) 'long int' 32 бит в 64-битной Windows, поэтому цикл никогда не будет завершен. Вы должны изменить тип 'i' на' size_t', чтобы быть уверенным, что он достаточно большой для любого индекса массива. Я понятия не имею, является ли это единственной проблемой. –
Дело в том, что он печатает более ста номеров, а затем есть нарушение прав доступа, поэтому, похоже, он не достигает предела. – Jordi