2015-09-05 36 views
2
#include <iostream> 
using namespace std; 

int main() 
{ 
    unsigned long maxindex = 2147483647ul+2ul; 

    char* p = new char[maxindex]; 

    for(int i = 0; i < maxindex; i++) 
    { 
     p[i] = 65; 
    } 

    cout<<"Value at index "<<maxindex-1<<" is "<<p[maxindex-1]<<endl; 

    delete[] p; 

    return 0; 
} 

我正在使用4GB內存的Windows 64位上運行此程序。當我開始運行程序時,內存爲0.99GB,內存使用量高達3.07GB,程序停止響應,我被要求關閉程序。Windows無法分配內存並停止程序?

如果我將2ul改爲unsigned long maxindex = 2147483647ul+2ul;改爲1ul,內存使用量將上升至2.98GB,程序將成功運行。

這是怎麼發生的?它只是分配一個char元素。

+0

也打印'i'的值?確保它是你的想法。 –

回答

1

變化for(int i變爲for(unsigned long i

+0

我試了一下,它的工作原理。但爲什麼程序工作時,我使用1ul而不是2ul使用for(int i;,2147483647 + 1 = -2147483648?1ul不應該工作太多,但它確實。 – WhatIf

+0

因爲你在使用INT而不是UNSIGNED INT在for循環。這就是答案試圖告訴你的內容。int溢出到負範圍內,並且你不能分配負值大小.. – Brandon