2012-09-11 34 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