我试图通过将两个动态矩阵传递给一个函数来相乘。乘法时出现分段错误。
正在通过函数传递矩阵。参数中的项目是正确的,因为在此项目中我必须将它们用于其他操作。我觉得自己弄乱了指针,但是我对C还是很陌生,我不确定我在哪里弄乱了。
wget https://www.python.org/ftp/python/3.6.6/Python-3.6.6.tgz
答案 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语言,但是诀窍是首先让您更清楚。