2011-09-01 69 views
0

我想知道,如何使用函數參數將指針傳遞給動態分配的數組。這個函數應該分配數組10x10(爲簡單起見,跳過檢查)。這可能嗎?我究竟做錯了什麼?提前致謝。函數內二維數組的動態分配(使用指針返回分配對象的地址)

int array_allocate2DArray (int **array, unsigned int size_x, unsigned int size_y) 
{ 
    array = malloc (size_x * sizeof(int *)); 

    for (int i = 0; i < size_x; i++) 
     array[i] = malloc(size_y * sizeof(int)); 

    return 0; 
} 

int main() 
{ 
    int **array; 
    array_allocate2DArray (*&array, 10, 10); 
} 

回答

0

嘗試是這樣的:

int array_allocate2DArray (int ***p, unsigned int size_x, unsigned int size_y) 
{ 
    int **array = malloc (size_x * sizeof (int *)); 

    for (int i = 0; i < size_x; i++) 
     array[i] = malloc(size_y * sizeof(int)); 

    *p = array; 
    return 0; 
} 


int **array; 
array_allocate2DArray (&array, 10, 10); 

我使用的臨時p以避免混淆。

+0

爲什麼在這裏使用&array而不是簡單地在int中傳遞數組array_allocate2DArray(int ** p,...) – Raulp

1

當我遇到類似的問題時(當時我正在尋找一種在C中動態分配字符串數組的方法),我遇到了這篇文章。我更喜歡從函數返回數組指針。以下工作適合我(我適應它爲您的整數數組)。我爲每個值任意設置99,所以我可以看到它們打印出來。

int **array_allocate2DArray(unsigned int size_x, unsigned int size_y) 
{ 
     int i; 
     int **arr; 

     arr = malloc(size_x*(sizeof(int*))); 

     for (i=0 ; i<size_x ; i++){ 
       arr[i] = malloc(size_y); 
       *arr[i] = 99; 
     } 

     return arr; 

} 

int main(void) 
{ 
     int i; 
     int **arr; 

     arr = array_allocate2DArray(10, 10); 

     for (i=0 ; i<10 ; i++){ 
       printf("%d\n", *arr[i]); 
       free(arr[i]); 
     } 
     free(arr); 

     return 0; 
}