0

11 20 10 などの行列の要素の値を増やすと、セグメンテーション違反が発生するのはなぜですか。通常、結果行列の最初の行はすべて 0 で、行列の 2 行目は正しく取得されます。また、正しい結果が得られることもあります。このコードの何が問題なのかわかりません

4

2 に答える 2

1

この2行を反転させたようですが、

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

したがって、 data->Kの前の値を使用しているため、2 番目の行列が最初の行列よりも大きい場合は、割り当てられていないメモリにアクセスします -> scanf("%f", &(data->B[ i][j]))

于 2013-02-19T23:53:15.733 に答える
1

K潜在的な問題の 1 つは、メンバー変数が変更される可能性があるように見えることです。

(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 に答える