C语言-矩阵乘法错误



我想写一个代码,得到一个矩阵A和它的维度,一个矩阵B和它的维度,并返回一个矩阵C,使C=AB

可以安全地假设A的列数等于B的行数,因此定义了C=AB

这是我的代码:

int *matrix_multiplication(int *A,int row_A,int column_A,int *B,int row_B,int column_B)
{
    int row_C,column_C,*C,i,j,k,sum=0;
    row_C=row_A;
    column_C=column_B;
    C=(int*)malloc(row_C*column_C*sizeof(int));
    for(i=0;i<row_C;i++)
    {
        for(j=0;j<column_C;j++)
        {
            for(k=0;k<column_A;k++)
                sum+=(*(A+column_A*i+k))*(*(B+column_B*k+j));//A[i][k]B[k][j]
            *(C+row_C*i+j)=sum;
            sum=0;
        }
    }
    return C;
}

简单解释一下:我把矩阵看作是一个一维数组,大小为columns*rows*sizeof(int),给定公式为A[i][j]=*(A+column_A*i+j),其中A是指向数组第一个元素的指针,column_A是"矩阵"A中的列数。

我的问题是,我的代码不工作的一些输入时,row_C != column_C

例如,如果A=[28,8,12;14,5,45]B=[31;27;11],它返回C=[1216;-842150451]

为什么会发生这种情况?我好像找不到错误

Try

*(C+column_C*i+j)=sum;
创建一个函数或宏来访问矩阵元素可能是个好主意。这样就可以避免将来出现类似的问题。

相关内容

  • 没有找到相关文章

最新更新