【问题标题】:Access violation reading data from binary file into struct in C访问冲突将二进制文件中的数据读取到C中的结构中
【发布时间】:2017-05-10 14:06:42
【问题描述】:

我一直在尝试从存储结构的二进制文件中读取数据,但是当文件被正确读取时,任何访问该结构的尝试都会导致访问冲突。 这是结构:

typedef struct Object {
    const char *Description;
    const char *Tag[20];
    struct Object *Location;
    struct Object *Destination;
} OBJECT;

这是用于读取文件的代码:

int ReadInDataFiles(OBJECT Objects[])
{
    FILE *pObjectFile = NULL;
    OBJECT TempObjects;

    if (fopen_s(&pObjectFile, OBJECT_FILE, "rb") != 0)
    {
        printf("Error: external file cannot be opened.");
        return 1;
    }
    else
    {
        fread(&TempObjects, sizeof(OBJECT), 1, pObjectFile);

        for (int Count = 0; Count < NUMBER_OF_OBJECTS; Count++)
        {
            Objects[Count] = TempObjects;

            fread(&TempObjects, sizeof(OBJECT), 1, pObjectFile);
        }

        fclose(pObjectFile);
    }

【问题讨论】:

  • 这需要更多细节,您是否将结构序列化为二进制文件?如果是,请向我们展示执行此操作的代码。是否可以创建MCVE
  • 别担心,我试图在其中处理一些文件而忘记了我将其创建为链表。应该更多地关注代码的其余部分。

标签: c struct


【解决方案1】:

由于指针是在运行时分配的,而地址是在运行时分配的,所以在文件中存储/加载包含指针的二进制映像毫无意义,因为每次执行程序时地址都会有所不同。

因此,您无法加载此结构。您必须从头开始重新编写整个程序,因为这没有任何意义。

【讨论】:

    猜你喜欢
    • 2021-12-17
    • 2013-11-26
    • 2015-02-18
    • 2018-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-08
    • 1970-01-01
    相关资源
    最近更新 更多