2012-09-11 33 views
2

我有一個名爲make5簡單的函數,使得每個元素在等於5 2D矩陣,如下所示:如何在C函數中自動創建雙指針參數?

int make5(int r, int c, double **d) 
{ 
    int i, j; 

    for (i = 0; i < r; i++) { 
    for (j = 0; j < c; j++) { 
     d[i][j] = 5; 
    } 
    } 

    return 0; 
} 

我想能夠運行於不同的矩陣這一功能,使用下面的調用:

make5(2, 3, a); 
make5(2, 4, b); 

其中a和b已被聲明爲指向數組數組的指針。但是當我嘗試這個時,我不斷收到分段錯誤錯誤。我如何更改make5,以便我可以在a和b上運行它?

+2

你分配了'了'和/或'B'的空間? – amit

+0

你傳遞給函數'make5()'的指針應該指向一些有效且足夠的內存。只要你確保,你的代碼就可以正常工作。 –

+1

你能告訴你如何聲明'a'和'b'? – Flavio

回答

1

該功能工作得很好。您必須錯誤地分配內存或將錯誤的參數傳遞給函數。

工作例如:

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

int make5(int r, int c, double **d) 
{ 
    int i, j; 

    for (i = 0; i < r; i++) { 
    for (j = 0; j < c; j++) { 
     d[i][j] = 5; 
    } 
    } 

    return 0; 
} 

#define ROWS 4 
#define COLS 3 

int main(void) 
{ 
    double** p = malloc(ROWS * sizeof(double*)); 
    int i, j; 

    for (i = 0; i < ROWS; i++) 
    p[i] = malloc(COLS * sizeof(double)); 

    for (i = 0; i < ROWS; i++) 
    for (j = 0; j < COLS; j++) 
     p[i][j] = 1; 

    for (i = 0; i < ROWS; i++) 
    { 
    for (j = 0; j < COLS; j++) 
     printf("%f ", p[i][j]); 
    printf("\n"); 
    } 

    make5(ROWS, COLS, p); 

    for (i = 0; i < ROWS; i++) 
    { 
    for (j = 0; j < COLS; j++) 
     printf("%f ", p[i][j]); 
    printf("\n"); 
    } 

    return 0; 
} 

輸出(ideone):

1.000000 1.000000 1.000000 
1.000000 1.000000 1.000000 
1.000000 1.000000 1.000000 
1.000000 1.000000 1.000000 
5.000000 5.000000 5.000000 
5.000000 5.000000 5.000000 
5.000000 5.000000 5.000000 
5.000000 5.000000 5.000000