我已经获得了一个从两个文本文件中读取矩阵的代码。 (假设这是正确的)我需要提出一个将两个矩阵相乘的函数。
这是给定的函数原型:
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
答案 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];
}
}
}