0

人々がこのコードのスニペットを見て、浮動小数点例外の考えられる原因を教えていただければ幸いです。

情報:

  • ブランチはサイズ 200 の int 配列です
  • line は char 配列サイズ 20 です
  • ループが 6 回正常に実行された後、例外が発生します。

これを引き起こす可能性のある除算、浮動小数点数、または整数がないため、私は混乱しています。

    for (count = 0; count < sizeof(branches); count++){

    if (fgets(line,sizeof(line),fp)==NULL)
     break;
    else {

    int branch_taken = line[16] - 48; 

    branches[count] = branch_taken;
     }   
    }
4

1 に答える 1

7

sizeof(branches)バイト単位のサイズです。要素の数、つまり200を表す定数を使用する必要があります。そうしないと、branches配列の境界を超えてしまい、未定義動作になります。

コードはおそらく次のようになります。

#define NUM_BRANCHES 200

int branches[NUM_BRANCHES];

for (count = 0; count < NUM_BRANCHES; count++)
{
    ...
于 2012-10-22T18:37:29.093 に答える