编辑:当我更改工作目录时它可以工作,因此文件是在不同的目录中创建的。我之前使用的目录唯一奇怪的是它是一个与 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 给出零并出现错误。我在 Linux Mint 而不是 OSX 上遇到了这个问题。其他人在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() 中抱怨。
谢谢。