2

我有一个名为 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 上运行它?

4

1 回答 1

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 
于 2012-09-11T07:24:57.280 回答