0

我正在尝试编写一个函数,通过传入三个矩阵、要添加的两个矩阵和结果矩阵来添加两个矩阵。我用结构表示一个矩阵。这是我的代码

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

typedef struct{
  int rows;
  int columns;
  double *data;
}Mat;

int Add(Mat *m1, Mat *m2, Mat **result);

int main(){
  Mat m1,m2;
  Mat *result = NULL;

  m1.rows=2;
  m1.columns=2;
  double temp1[2][2] = {{1,2},{3,4}};
  m1.data = &temp1[0][0];

  m2.rows = 2;
  m2.columns = 2;
  double temp2[2][2] = {{1,1},{1,1}};
  m2.data = &temp2[0][0];

  Add(&m1,&m2,&result);
  int ii,jj;
  printf("\nresult\n");
  for(ii=0;ii<2;ii++){
     for(jj=0;jj<2;jj++){
         printf("%f ",*result->data++);
      }
    printf("\n");
   }
   printf("%d\n ",result->columns);

 return 0;
}


int Add(Mat *m1, Mat *m2, Mat **result)
{
  int ii,jj;
  double new[m1->rows][m1->columns];
  int mat_size = (m1->rows)*(m1->columns);
  Mat *temp = malloc(sizeof(int)*2+sizeof(double)*mat_size);
  temp->rows = 2;
  temp->columns = 2;

  for(ii=0;ii<(m1->rows);ii++){
    for(jj=0; jj<(m1->columns);jj++){
      new[ii][jj] = *(m1->data++) + *(m2->data++);
     }
  }
  temp->data = &new[0][0];
   *result = temp;

}

当我尝试打印结果矩阵时,我遇到的问题是在我的主要功能结束时。它只打印 0。我能够正确打印“结果”的列和行,但不能正确打印数据。任何人都可以帮忙吗?提前致谢

4

1 回答 1

0

您的 Add 函数中有几个基本错误。这里有一个更正的版本。

void Add(Mat *m1, Mat *m2, Mat **result)
{
   int ii,jj;
   int mat_size = (m1->rows)*(m1->columns);
   Mat *temp = malloc(sizeof(Mat));         /* Allocate the matrix header */
   temp->rows    = m1->rows;
   temp->columns = m1->columns;
   temp->data    = calloc(mat_size, sizeof(double));     /* Allocate the matrix data */

   for(ii=0; ii<m1->rows; ii++) {
     int row = ii*m1->columns;
     for(jj=0; jj<m1->columns; jj++)
       temp->data[row + jj] = m1->data[row + jj] + m2->data[row + jj]; 
       /* or something like that*/
   }
       /* In any case, incrementing the data pointer is wrong */

  *result = temp;
}

尽管如此,仍然缺少一些东西。没有完整性检查,即矩阵维度是否兼容并且没有检查分配错误。

于 2013-03-27T20:49:22.823 回答