C 矩阵和向量相乘,逻辑错误

C 矩阵和向量相乘,逻辑错误,c,arrays,matrix,C,Arrays,Matrix,我有一个函数,它是矩阵和向量的乘积: double *matrix_vector_multiply(int rows, int cols, double **mat, double *vec) { double *answer = malloc(rows * sizeof (double)); int i,j; for (i=0; i<rows; rows++) ans[i]=0; for

我有一个函数,它是矩阵和向量的乘积:

 double *matrix_vector_multiply(int rows, int cols,
                           double **mat, double *vec)
{

    double *answer = malloc(rows * sizeof (double));
    int i,j;
    for (i=0; i<rows; rows++)
    ans[i]=0;

    for (i=0; i<rows; rows++){

        for (j=0; j<cols; cols++)
             {
            answer[i] = answer[i] + mat[i][j] * vec[j];
            }
        }
    return ans;
}
double*matrix\u vector\u multiply(int行、int列、,
双**垫,双*vec)
{
double*answer=malloc(行*sizeof(double));
int i,j;

对于(i=0;i你有
ans
answer
。我希望你能找出剩下的;)

这是你发布的实际代码吗?以及
ans
answer
等的明显问题,你的for循环完全错误,例如

for (i=0; i<rows; rows++)

用于(i=0;i两个for循环中的变量i和j从未改变,因为您似乎增加了行和列。这意味着您将始终在第二个for循环体中进行相同的求和。您的其他答案别无选择,只能保持在0,因为您从未在init之后计算它们的值。

您将所有值存储为0
ans
,然后返回
ans
answer
(i)为了你自己的利益,请习惯成语
sizeof(*answer)
,而不是
sizeof(double)
;(ii)发布一个我们可以运行和测试的示例。(iii)返回并初始化的
ans
,没有声明;相反,您声明并修改
answer
(iv)每次循环迭代,你都会增加
,但你的索引是
i
j
;这些循环是怎么结束的?为什么你要增加for循环中的行数和列数,而不是增加i和j?我遗漏了什么吗?为什么你要问一个新问题,而这个问题基本上是绕圈子的同样的问题?在你提出这些问题之前,请先阅读基本C。请不要使用2D数组的模拟来开始编程C。你有指向指针的指针,这些是不同的东西。至少从简单的事情开始,学习如何正确地使用
for
循环之类的东西,传递对于这样的事情,对每个人来说都是浪费时间,包括你。我怀疑OP是否发布了原始代码,因为循环
(I=0;I
永远不会结束,除非
行==0
。当行的增量超过INT\u MAX时,它最终会结束。但代码无论如何都不会编译,除非
ans
被声明为全局变量。
for (i=0; i<rows; i++)
    for (j=0; j<cols; cols++)
    for (j=0; j<cols; j++)