C++中以二进制模式写入结构体时遇到的读取访存权限问题

问题遇到的现象和发生背景
   这个问题出现在我编写一个以哈夫曼编码压缩文件的程序的时候。压缩文件需要写入一个文件头,用于携带文件内容解压规则等。这个文件头是一个结构体,包含了string类成员变量,写入时没有问题但读出时会触发断点。
问题相关代码,请勿粘贴截图
    为了使问题更清楚,就不放原来的代码了,改用一段代码复现这个问题。
    
struct Cube {
    string name;
};


int main() {
    FILE* fp;
    Cube cube1, cube2;

    cube1.name = "peter";

    fopen_s(&fp, filepath.c_str(), "wb");
    if (fp == NULL) {
        return 0;
    }
    fwrite(&cube1, sizeof(Cube), 1, fp);
    fclose(fp);

    fopen_s(&fp, filepath.c_str(), "rb");
    if (fp == NULL) {
        return 0;
    }
    fread(&cube2, sizeof(Cube), 1, fp);
    fclose(fp);

    return 0;
}

Cube是一个简单的结构体,只有一个成员就是string name,将它以二进制模式写入文件,再读出来。

运行结果及报错内容

触发了Xmemory中的一个断点。

img

目前我唯一的解决办法

目前我只找到唯一一个办法解决它,就是把string换成一个char数组。但是我很好奇,为什么不能写入拥有string成员的结构体呢?希望有人可以指点迷津。

你看提示啊,并不是什么权限问题,你企图读取0xfffffff...中的内容,你看这地址0xffffff...,这么长一串F,肯定出错

在定义结构体时,字符串一般用 char name[100],数组的方式写入,而不是string。