編集:作業ディレクトリを変更すると機能するため、ファイルは別のディレクトリに作成されます。以前使用していたディレクトリで唯一奇妙な点は、それが VirtualBox で使用される共有ディレクトリであることです。これはずっと VirtualBox のバグですか? 別のディレクトリの使用を開始することをお勧めします。
私は非常に奇妙な問題を抱えています。私のプログラムのどこかにこのコードがあります。問題を示すためにいくつかの情報を出力するように変更しました。
uint8_t section[9];
long pos = ftell(rd);
fseek(rd, 0, SEEK_END);
printf("%li\n",ftell(rd));
fseek(rd, pos, SEEK_SET);
printf("%li\n",ftell(rd));
clearerr(rd);
int i = fread(section, 1, 9, rd);
if (i != 9){
printf("%i - %i - %i\n",i,feof(rd),ferror(rd));
出力は次のとおりです。
23
14
0 - 0 - 1
したがって、この時点でのファイルの長さは 23 で、カーソルは 14 です。9 バイトが必要ですが、fread はゼロを返し、エラーを表示します。この問題は、OSX ではなく Linux Mint で発生します。他の誰かが debian でこの問題を抱えていないようです。何がこの問題を引き起こすのかわかりません。エラーの原因をさらに診断する方法はありませんか? ferror() はゼロ情報を提供します。
ファイルは「wb+」モードで開かれます。
編集:
valgrind で次のあいまいなエラーが見つかりました。
==22141== Syscall param write(buf) points to uninitialised byte(s)
==22141== at 0x5B68900: __write_nocancel (syscall-template.S:82)
==22141== by 0x5AFB882: _IO_file_write@@GLIBC_2.2.5 (fileops.c:1289)
==22141== by 0x5AFB749: new_do_write (fileops.c:543)
==22141== by 0x5AFCEB4: _IO_do_write@@GLIBC_2.2.5 (fileops.c:516)
==22141== by 0x5AFDD3E: _IO_switch_to_get_mode (genops.c:189)
==22141== by 0x5AFBA96: _IO_file_seekoff@@GLIBC_2.2.5 (fileops.c:999)
==22141== by 0x5AF4F25: rewind (rewind.c:37)
==22141== by 0x567D149: CBFileAppend (CBFileEC.c:69)
==22141== by 0x5473AFA: CBDatabaseCreateDeletionIndex (CBDatabase.c:270)
==22141== by 0x5473195: CBInitDatabase (CBDatabase.c:112)
==22141== by 0x54721A1: CBNewAddressStorage (CBAddressStorage.c:37)
==22141== by 0x401F67: main (testCBAddressManager.c:226)
==22141== Address 0x402a009 is not stack'd, malloc'd or (recently) free'd
==22141== Uninitialised value was created by a stack allocation
==22141== at 0x546F750: ??? (in /media/sf_BitEagle_Projects/cbitcoin/bin/libcbitcoin-storage.2.0.so)
どこかわからない???は明らかに、これをさらにデバッグすることはできません。rewind() で不平を言っているのは奇妙です。
ありがとう。