私は以下のコードを持っています(ベンチマーク目的のみ)。fread inside forループの呼び出しに失敗します
コードは、シンプルなchar配列を作成し、ファイルにダンプし、ループ内のfor
ループ内で読み取ることで構成されています。 fopen
(fread
はNULL
を返します)の失敗者のために読み込み関数が失敗するのはなぜですか?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;
}
エラーメッセージを教えてください。 –
@KeineLust申し訳ありませんがコードを貼り付けるのを間違えました。今修正されました。 – manatttta
@CharlieMartinアサーションで失敗する、 'assert(f)' – manatttta