如何在C中将两个动态矩阵相乘?

时间:2019-02-16 23:10:52

标签: c

我试图通过将两个动态矩阵传递给一个函数来相乘。乘法时出现分段错误。

正在通过函数传递矩阵。参数中的项目是正确的,因为在此项目中我必须将它们用于其他操作。我觉得自己弄乱了指针,但是我对C还是很陌生,我不确定我在哪里弄乱了。

wget https://www.python.org/ftp/python/3.6.6/Python-3.6.6.tgz

1 个答案:

答案 0 :(得分:3)

一个明显的错误是,当c是大小为c + i * b_cols的指针数组时,您将取消引用a_rows。很可能c + i * b_cols在您之前分配给malloc()的区域之外。

我建议使用double的单个数组简化矩阵表示,该数组的大小等于元素的总数,即行* cols。

例如:

double *c;

c = malloc(sizeof(double) * a_rows * b_cols);

这不仅具有更好的整体性能,而且简化了代码。然后,您必须“线性化”一维数组内的偏移量才能从二维矩阵坐标转换。例如:

c[i * b_cols + j] = ...

当然,其他两个矩阵也需要以类似的方式进行分配,填充和访问。

为了清楚起见,我还将while语句替换为for语句,并使用它们在其上循环的实际变量。例如:

for (i = 0; i < a_rows; i++)
    for (j = 0; j < b_cols; j++)
       for (k = 0; k < a_cols; k++)

您可以通过多种方式(ab)使用C语言,但是诀窍是首先让您更清楚。