当我在C中的矩阵乘法程序中增加矩阵元素的值时,为什么我会出现分段错误?

时间:2013-02-19 23:44:53

标签: c multithreading pthreads matrix-multiplication

当我增加矩阵元素的值时,为什么我会得到分段错误,例如11 20 10.通常我得到第一行结果矩阵作为所有0和矩阵的第二行正确。有时它也会给出正确的结果。我不知道这段代码有什么问题

2 个答案:

答案 0 :(得分:1)

一个潜在的问题是,成员变量K看起来可能会发生变化:

(data->B) = malloc((data->K)*sizeof(float*));
scanf("%d%d", &(data->K), &(data->N));
for ( i=0;i<(data->K);i++)
   ...

在设置数组A时首先进行初始化。然后它用于分配基数组以保存B的列。但是下一个scanf可能会导致一个不再像以前一样的值(可能导致内存覆盖)。

答案 1 :(得分:1)

似乎你把这两行都颠倒了,

(data->B) = malloc((data->K)*sizeof(float*));
scanf("%d%d", &(data->K), &(data->N));

因此,您使用的是 data-&gt; K 的先前值,因此,如果您的第二个矩阵将大于第一个矩阵,则您将访问未分配的内存 - &gt; scanf(“%f”,&amp;(data-&gt; B [i] [j]))