Tôi đang chạy mã này, được biên dịch trên 64 bit vC++ 2005, trên Windows Server 2008 R2 với 32GB. Có một sự vi phạm truy cập bên trong vòng lặp for.Phân bổ bộ nhớ nhiều hơn 4GB trong hệ thống 64 bit
#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;
}
Vì vậy, nếu không có ngoại lệ trong cặp đôi mới [536870912], tại sao tôi bị vi phạm quyền truy cập khi thực hiện chuyển nhượng trên một vị trí mảng cụ thể?
Một điểm đáng lưu ý khác là chương trình này đã được thử nghiệm thành công trên máy tính khác.
Cam kết quá mức cũng có thể là thủ phạm. – syam
Một vấn đề là (tôi nghĩ) 'int' dài là 32 bit trên Windows 64-bit, do đó vòng lặp sẽ không bao giờ chấm dứt. Bạn nên thay đổi kiểu 'i' thành' size_t' để chắc chắn nó đủ lớn cho bất kỳ chỉ mục mảng nào. Tôi không biết đó có phải là vấn đề duy nhất hay không. –
Vấn đề là nó in ra trên một trăm số và sau đó có một sự vi phạm truy cập, do đó, có vẻ như nó không đạt đến giới hạn. – Jordi