gpt4 book ai didi

C:fread返回0

转载 作者:行者123 更新时间:2023-11-30 21:03:47 25 4
gpt4 key购买 nike

)我遇到了 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com