0

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

4

2 回答 2

1

一个潜在的问题是成员变量看起来K可以改变:

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

它在设置 array 时首先被初始化A。然后它用于分配基本数组以保存B. 但是下一个scanf可能会导致一个不再与以前相同的值(可能导致内存覆盖)。

于 2013-02-19T23:52:11.457 回答
1

看来你颠倒了这两行,

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

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

于 2013-02-19T23:53:15.733 回答