需要实现一个将矩阵乘以向量的函数。矩阵是二维数组,向量是一维的。我已经实现了点乘和矩阵乘法的函数,这是我的代码:
#include <stdio.h>
double dot( double *x, double *y, int n )
{
double res = 0.0;
int i;
for (i = 0; i < n; i++)
{
res += x[i] * y[i];
}
return res;
}
void mxv( double **m, double *v, double *res, int rows, int cols )
{
int i;
for (i = 0; i < rows; i++)
{
res[i] = dot(m[i], v, cols);
}
}
int main()
{
double m[3][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
double v[3] = {1,2,3};
double res[3] = {0};
mxv((double**)m, v, res, 3, 3);
printf("%f \n", res[0]);
printf("%f \n", res[1]);
printf("%f \n", res[2]);
return 0;
}
结果,出现分段错误。显然,这是由于不正确的指针传递造成的。已经尝试使用以下选项
mxv(m, v, res, 3, 3);
错误仍然发生。告诉我我做错了什么,如何解决它。