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