C:fread返回0

时间:2013-12-25 23:32:46

标签: c file pointers fwrite fread

) 我遇到了一个问题,并花了两天时间试图弄清楚这有什么问题。问题是我的其中一个假装正在返回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是一个指针,是否可以做出不同的做法? 提前谢谢!

1 个答案:

答案 0 :(得分:1)

已经弄清楚为什么会这样。关闭程序后我释放内存,当我从文件中读取时我不使用realloc,修复了