0

3 つのマトリックスを渡すことによって 2 つのマトリックスを追加する関数を作成しようとしています。私は構造体で行列を表しています。これが私のコードです

#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 に答える