2017-02-11 10 views
0

私は以下のコードを持っています(ベンチマーク目的のみ)。fread inside forループの呼び出しに失敗します

コードは、シンプルなchar配列を作成し、ファイルにダンプし、ループ内のforループ内で読み取ることで構成されています。 fopenfreadNULLを返します)の失敗者のために読み込み関数が失敗するのはなぜですか?forループをコメントアウトするとどうなりますか?

私はあなたの読み取り機能でforループ内で開いたファイルを閉じることはありませんアップルLLVMのバージョン8.0.0(打ち鳴らす-800.0.42.1)を使用して、そしてclang -o rw rw.cpp

int create(int, char**) { 

    char a[256*256]; 
    for (int i = 0; i < 256*256; i++) 
     a[i] = char(i); 

    // Dump to File 
    FILE* f = fopen("file.bin", "wb"); 
    fwrite(a, 256*256*sizeof(char), 1, f); 
    fclose(f); 

    return 0; 
} 



int read(int, char**) { 

    // IF this loop is commented out, the code works. Otherwise fails 
    for (int i = 0; i < 10000; i++) { 

     char a[256 * 256]; 

     FILE* f = fopen("file.bin", "rb"); 

     // Fails at this assertion 
     assert(f); 

     fread(a, 256*256*sizeof(char), 1, f); 

     for (int k = 0; k < 256 * 256; k++) { 
       if (a[k] != char(k)) { 
        printf("Bad Value %d %d\n", k, a[k]); 
       } 
     } 
    } 

    return 0; 

} 
+1

エラーメッセージを教えてください。 –

+0

@KeineLust申し訳ありませんがコードを貼り付けるのを間違えました。今修正されました。 – manatttta

+0

@CharlieMartinアサーションで失敗する、 'assert(f)' – manatttta

答えて

4

で簡単にコンパイルしています。あなたはファイルハンドルを使い果たしている可能性が高いです。

+0

これは、ありがとうございました:( – manatttta

1

fopenステートメントは、ファイルが1つのみであるため、forループの外側に移動できます。ループ内で開く必要はありません。

関連する問題