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