这个问题出现在我编写一个以哈夫曼编码压缩文件的程序的时候。压缩文件需要写入一个文件头,用于携带文件内容解压规则等。这个文件头是一个结构体,包含了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中的一个断点。
目前我只找到唯一一个办法解决它,就是把string换成一个char数组。但是我很好奇,为什么不能写入拥有string成员的结构体呢?希望有人可以指点迷津。
你看提示啊,并不是什么权限问题,你企图读取0xfffffff...中的内容,你看这地址0xffffff...,这么长一串F,肯定出错
在定义结构体时,字符串一般用 char name[100],数组的方式写入,而不是string。