2016-08-12 105 views
0

下面的代碼不會給出任何分配錯誤,但計數結束在大約16970與內存分配錯誤和系統暫停 ,我使用Turbo C++ 3.0 IDE ,Windows XP SP3 ,全部分區:NTFS ,PC:安裝了2 GB RAM的Dell 1545。C不能分配足夠的內存

#include <stdio.h> 
#include <stdlib.h> 

long counter=0; 
int main(int argc, char *argv[]) 
    { 
     char* array=(char*) malloc (1024*1024*10); 
     if (array==NULL) 
      { 
       /* allocation error */ 
       return 1; 
      } 
     for (counter=0 ; counter<10000000;counter++) 
     array[counter] = 1; // trying to fill the array with one's 
     free (array); 
     return 0; 
    } 
+4

@Meninx:這是什麼宇宙? '1024 * 1024 * 10 - > 10,485,760',絕對不會小於'10,000,000' –

+0

你指定一個char數組,然後用整數填充它的任何原因? –

+0

我現在看到你正在使用'C++'編譯器,這就是爲什麼你需要施放'malloc' – Michi

回答

4

Turbo C++在DOS環境下工作,在真實模式下工作除非您特別啓用保護模式。在實模式下,內存空間被分成64kbyte段,而size_t(malloc的參數)很容易就是16位。 1024 * 1024 * 10 mod 65536 = 0,所以上面的malloc調用運行到malloc(0)

malloc(0)的返回值是實現定義的,可能不爲零。 (what does malloc(0) return?)使用返回的指針是一個壞主意,Windows XP可能會干擾內存分配錯誤。

+0

(1024 * 1024 * 10 mod 65536 = 0,所以上面malloc調用malloc(0)),這應該返回一個'NULL'指針,但這不會發生! – Howard

+0

所以,這裏的問題是在TC++編譯器中?那麼,我應該替換它嗎? – Howard

+0

@howard是的,你應該用新的東西替換這個編譯器。 (你可能應該用更新的東西替換Windows XP,而你在這裏;-) – zwol