C:fread返回0

标签 c file pointers fwrite fread

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

相关文章:

c - 括号周围的“*”: pointers

char ** 然后取消对 char * 的引用

c - 在 C 中打印数字行

c - 在 C 中测量处理器滴答声

c - 在 c 中的 fork 进程上生成随机数

c++ - 逐行读取文件

c - 如果我的代码只传递了一个文件*,我的代码如何识别传递给 fopen() 的模式?

c - SSE 将整数加载到 __m128

c - 在 C 中读取长 ASCII 文件

c - 在 C 中使用 bsearch 的段错误