2014-05-05 71 views
2

我這裏The largest size of 2-D array in C問我的問題,我得到了什麼被一些人宣佈爲重複之前答案,我修改了代碼:獲取分段錯誤而使用malloc

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

int main() 
{ 
    int i,j,n,m,p = 0 ; 
    int sum[100000] = {0}; 

    scanf("%d%d%d",&n,&m,&p); 

    /*for (i = 0 ; i < n ; i++) 
    { 
     for(j = 0 ; j < m ; j++) 
     { 
      a[i][j] = j + 1 ; 
     } 
    }*/ 
    int **a = (int **) malloc(sizeof(int)*n); 
    for(i=0; i<n; i++) 
    { 
     a[i] = (int *) malloc(sizeof(int)*m); 

     for(i=0; i<n; i++){ 
      for(j=0; j<m; j++){ 
      a[i][j] = j + 1 ; 

      } 
     } 

    } 
    return 0; 
} 

但我仍得到相同的請幫我解決它,我希望這個問題不會被宣佈爲重複。 :P

回答

5

您正在告訴malloc()錯誤的尺寸。

此:

int **a = (int **) malloc(sizeof(int)*n); 

應該是:

int **a = malloc(n * sizeof *a); 

Don't cast the result of malloc(),並使用該類型sizeof返回指針點,即int *其中可能有不同的尺寸比int您的系統上。

因此,這樣的:

a[i] = (int *) malloc(sizeof(int)*m); 

應該是:

a[i] = malloc(m * sizeof *a[i]); 

添加代碼,以確保所有malloc()成功,即有去無回NULL,依靠三分球是有效的之前。還要確保最初的scanf()返回3,並打印出n,mp的值。還請刪除sum

+0

+1(注意:也是'a [i] = malloc(m * sizeof ** a);'或者類似的東西) – chux

+0

你能給我整個代碼嗎?我仍然沒有得到所需的輸出。 – jahan

+0

int ** a = malloc(n * sizeof * a);對於(i = 0; i jahan

0

int **a = (int **) malloc(sizeof(int)*n);是錯誤的。你在這裏想要的是一個指針數組,所以你應該改爲int **a = (int **) malloc(sizeof(int *)*n);