) 我遇到了 fread 问题,花了 2 天试图找出问题所在。问题是我的一个 freads 返回 0..而它不应该返回 0。
我有一个结构,例如
typedef struct
{
contents
} tM;
我有一个 tM 类型的指针:
tM *macs = NULL;
该指针是通过 realloc 动态分配的。它存储有关机器的内容,例如 macs[1].machineName = blabla 。每次我用 realloc“添加一台机器”时,我都会增加 machineCounter。
我有一个函数可以将其保存到一个文件中,并且可以从该文件中读取。我不知道哪一个出现了故障,但有些地方出了问题。
我用这种方式将其保存到文件中:
void writeMac(int countMac, tM *macs)
{
FILE *fileMacs;
if (countMac != 0)
{
fileMacs = fopen("machines.dat","wb");
if (fileMacs == NULL)
{
errorcodehere
}
else
{
fwrite(&countMac,sizeof(int),1,fileMacs);
fwrite(macs,sizeof(tM),countMac,fileMacs);
fclose(fileMacs);
}
}
}
创建的文件大小不是 0,但我不知道这是否足以让我相信该文件已正确创建。
并从该文件中读取:
void readMacs(int *countMac, tM *macs)
{
FILE *fileMacs;
int numberMachinesRead;
fileMacs = fopen("machines.dat","rb");
if (fileMacs == NULL)
{
errorcontenthere
}
else
{
fread(&(*countMac),sizeof(int),1,fileMacs);
numberMachinesRead = fread(macs, sizeof(tM), *countMac, fileMacs);
fclose(fileMacs);
}
}
问题是,在调试代码时,在读取时,第一个 fread 确实为 *countMac 分配了正确的机器数量,但是,第二个 fread 始终返回 0。 即使 *countMac > 0,它也会返回 0。 怎么了?考虑到 macs 是一个指针,fread 应该以不同的方式进行吗? 预先感谢您!
最佳答案
已经知道为什么会这样了。关闭程序后,我释放内存,当我从文件中读取时,我不使用 realloc,修复了该问题
关于C:fread返回0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20777649/