2013-01-03 84 views
1

我想使用calloc和malloc來創建一個2維數組。直到現在,我的邏輯是首先用calloc創建一個整數指針數組,然後使用malloc創建第二個維度。這是我的代碼:2維陣列與malloc

enter code here 


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

    int main() 
    { 
     int N,M,i=0,j=0; 

     printf("Give the dimensions"); 
     scanf("%d%d",&N,&M); 
     printf("You gave N: %d and M: %d\n",N,M); 

     int **a=(int**)calloc(N,sizeof(int*)); 

     for(i=0; i<N; i++) 
     { 
      a[i]=(int*)malloc(M*sizeof(int)); 
     } 

     printf("The array that was created resigns on addresses\n"); 
     for(i=0; i<N; i++) 
     { 
      for(j=0; j<M; j++) 
      { 
       printf("addr: %p\n",a[i,j]); 
      } 
     } 
    } 

有了這個,我想確保我創建我想要的數組。給出維數N = 2和M = 2(只是一個例子),我取地址(例如):(0,0):0x00001,(0,1):0x00003,(1,0):0x00001,(1 ,1):0x00003。因此,我沒有得到2維數組,只是一個只有2個位置的簡單數組。你能指出我的編碼錯誤嗎?我找不到它...:S

+0

即使您確信系統將成功返回,您也應該檢查返回值是否合適。也是's/resigns/resides /' – dmckee

+0

是的,我會的!謝謝:) – alex777

回答

3

索引訪問運算符的使用錯誤[]。你不訪問的第i行和第j列,而是隻有j元素,因爲你用逗號:

a[i,j] == a[j] 

相反,你必須訪問給定的行,然後接入小區:

a[i][j] 

注意,這將不返回的地址,但一個int

typeof a  == int ** 
typeof a[i] == int * 
typeof a[i][j] == int 

如果您仍然想知道您必須使用的條目地址&a[i][j]a[i]+j

+0

Thx很多傢伙!我沒有得到任何警告或任何對我那個愚蠢的錯誤。非常感謝:)) – alex777

2
printf("addr: %p\n",a[i,j]); 

也就是說

printf("addr: %p\n",a[j]); 

您使用逗號操作符那裏。

要訪問i個陣列的j個元素,你會使用

a[i][j] 

但是,這將是一個int這裏,而不是一個指針,以便printf將調用未定義行爲轉換爲%p

+0

感謝您的回答。我只是做了你所說的。 (j = 0; j alex777

+0

我現在明白了。謝謝 :) – alex777