如何在C函数中自动生成双指针参数?

我有一个名为make5的简单函数,它使2d矩阵中的每个元素都等于5,如下所示:

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上运行它?

该function工作得很好。 您必须错误地分配内存或将错误的参数传递给该函数。

工作范例:

 #include  #include  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