C:使用双指针的矩阵乘法

时间:2014-11-18 04:39:41

标签: c pointers

我已经获得了一个从两个文本文件中读取矩阵的代码。 (假设这是正确的)我需要提出一个将两个矩阵相乘的函数。

这是给定的函数原型:

int** matMult(int **a, int num_rows_a, int num_cols_a, int** b, int num_rows_b, int num_cols_b);

这是我的功能代码:

int** matMult(int **a, int num_rows_a, int num_cols_a, int** b, int num_rows_b, int num_cols_b){

    int **c;

    c = (int**)malloc(sizeof(int*)*num_rows_a);
//    c = calloc(num_rows_a, num_cols_b);


    for (int i = 0; i < num_rows_a; i++) {
        for (int j = 0; j < num_cols_b; j++) {
            int sum = 0;
            for (int k = 0; k < num_cols_a; k++) {

                c[i][j] = a[i][k] * b[k][j] + sum;
                sum = c[i][j]; //so that previous answer gets stored 
            }
        }

    }
    return c;
}

我必须调用malloc为结果矩阵c

分配空间

我从Xcode获得的问题还有:EXC_BAD_ACCESS

2 个答案:

答案 0 :(得分:1)

您还需要为列分配内存。 :

int **c;

c = (int**)malloc(sizeof(int*)*num_rows_a);

for(i=0;i<num_rows_a;i++)
    c[i]=malloc(sizeof(int)*num_cols_b);    

答案 1 :(得分:0)

@Stinson的答案已经解决了内存问题。我将建议对内部代码块进行一些改进。代码中不需要临时sum

for (int i = 0; i < num_rows_a; i++) {
  c[i] = malloc(sizeof(int)*num_cols_b);
  for (int j = 0; j < num_cols_b; j++) {

     // Initialize the element to zero.
     c[i][j] = 0;
     for (int k = 0; k < num_cols_a; k++) {
        // Accumulate the result
        c[i][j] += a[i][k] * b[k][j];
     }
  }
}