我有以下代碼(僅用於基準目的)。調用fread裏面for循環失敗
該代碼包括創建一個簡單的字符數組,將其轉儲到文件,然後在for
循環內讀取它。 爲什麼讀取功能由於fopen
(fread
返回NULL
)中的失敗者而失敗,但是如果我註釋掉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