) 我遇到了一个问题,并花了两天时间试图弄清楚这有什么问题。问题是我的其中一个假装正在返回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是一个指针,是否可以做出不同的做法? 提前谢谢!
答案 0 :(得分:1)
已经弄清楚为什么会这样。关闭程序后我释放内存,当我从文件中读取时我不使用realloc,修复了