【发布时间】:2018-08-23 19:12:17
【问题描述】:
我正在尝试读取和写入二进制文件,但它大部分都可以工作
在 main 中返回 0 时会得到 munmap_chunk(): invalid pointer: error
程序关闭时将获得内存转储和堆栈跟踪
这是内存转储和堆栈跟踪的截图,我不知道如何阅读
#include <fstream>
#include <iostream>
using namespace std;
struct player{
string name;
};
bool WriteTest(player playerData){
// Create our objects.
fstream filestream;
//attempt to open file and then read first player
filestream.open ("file.bin", ios::binary | ios::out);
filestream.write(reinterpret_cast <char *> (&playerData),
sizeof(playerData));
if(filestream.fail()){
//create file if there is no file
cout << "write open failed" << endl;
filestream.close();
return false;
}
filestream.close();
cout << "write sucsess" << endl;
return true;
}
player ReadTest(){
player playerData;
// Create our objects.
fstream filestream;
//attempt to open file and then read first player
filestream.open ("file.bin", ios::binary | ios::in);
filestream.read(reinterpret_cast <char *> (&playerData),
sizeof(playerData));
if(filestream.fail()){
//create file if there is no file
cout << "read open failed" << endl;
filestream.close();
return playerData;
}
filestream.close();
cout << "read sucsess" << endl;
return playerData;
}
void displayPlayerData(player playerData){
cout << " Name :" << playerData.name << endl;
}
int main(){
player source;
source.name = "bap";
displayPlayerData(source);
WriteTest(source);
getchar();
player playerData = ReadTest();
displayPlayerData(playerData);
return 0;
}
【问题讨论】:
-
filestream.read(reinterpret_cast <char *> (&playerData), sizeof(playerData));-- 这条线永远行不通。playerData是非 POD 类型,因此您无法以这种方式读取或写入这些类型。了解正确的对象序列化。 -
More reading on object serialization。我几乎想把它作为一个副本关闭,因为我看到很多问题都有相同的错误——试图对非 POD 类型进行错误的二进制读取和写入。
-
我看不懂那个帖子,好像在告诉我在结构中写一个静态函数但我不知道如何使用它
-
Read the accepted answer here。您的代码将不起作用,期间。如果您不明白,请阅读我的答案。
标签: c++