2012-01-27 13 views
0

我試圖創建大小從10x10到​​1000x1000所有的矩陣大約980我開始用盡內存,即使程序顯然不使用我的系統的所有4GB 。我的代碼如下所示:C沒有可用的程序內存:不安全的調用malloc錯誤

double **a3; 
    double **result; 
    a3 = malloc(k * sizeof(double *)); 
    for(i = 0; i < k; i++) 
    { 
     a3[i] = malloc(sizeof(double)); 
    } 
    result = malloc(k * sizeof(double *)); 
    for(i = 0; i < k; i++) 
    { 
     result[i] = malloc(k * sizeof(double)); 
    } 
    for(i = 0; i < k; i++) 
    { 
     for(j = 0; j < k; j++) 
     { 
      a3[i][j] = 0; 
      result[i][j] = 0; 
     } 
    } 
    ... 
    for(i = 0; i < k; i++) 
{ 
    free(a3[i]); 
    free(result[i]); 
} 
free(a3); 
free(result); 

我不知道爲什麼,這並不工作(如果我使用int數組,但我需要雙陣列,它的工作)

我使用的是Mac OSX 64位

+0

你將無法使用malloc 4GB;可能接近2GB。什麼OS? WINOWS? Linux呢? – 2012-01-27 01:05:31

+0

'k'的價值是什麼? – Joe 2012-01-27 01:05:40

+0

k從10變到1010,但980是失敗時。我在Mac OSX – chrstahl89 2012-01-27 01:08:13

回答

1

我不確定如何「清除」你實際上沒有使用可用於程序的所有內存。如果我的想法正確,你最終會分配總共333,833,185雙。每個八字節,超過2.5GB。

不知道您的C編譯器的內存管理工具有多少可用...爲什麼不寫一個簡單的程序來發現您可以使用malloc()的最大內存量?

相關問題