我正在尝试编写一个数据结构:
struct dataEntry
{
std::list<int> listTiles;
char* pData;
int nSize;
}
到二进制文件。
我使用ofstream写入二进制文件:
Write(char* fileName, const dataEntry& dataStruct)
{
ofstream binFile("fileName, ios::out | ios::binary | ios::trunc);
if(binFile.open())
{
binFile.write((char*)&dataStruct, sizeof(dataStruct));
binFile.close();
}
}
我使用相同的方法来回读二进制文件:
Read(char* fileName, const dataEntry& dataStruct)
{
ifstream binFile("fileName, ios::in| ios::binary );
if(binFile.open())
{
binFile.read((char*)&dataStruct, sizeof(dataStruct));
binFile.close();
}
}
但是,在读取二进制文件后,我无法遍历列表。它给了我一个例外,说&#34;列出了迭代器以外的范围&#34;。
第二个问题是,当我第二次尝试读取二进制文件时,&#34; pData&#34;不是我输入的内容。
int Main()
{
char* name = "C:\\file.dat";
char* buf = "ABCDEFG";
dataEntry newData;
newData.listTiles.push_back(1);
newData.listTiles.push_back(2);
newData.nSize = 5;
newData.pData = buf;
Write(name, newData);
Read(name, newData);
buf = newData.pData; // wrong value when read 2nd time
newData.listTiles.remove(2); // crashed here
}
答案 0 :(得分:1)
检查Udemy上的高级c ++课程,教师说你不能存储指向二进制文件的指针,因为当你试图读回它们时,你在编写它们之前使用的指针(地址)仍然不会保留给列表。所以你必须保存数据而不是指针