我是C ++的新手,遇到了关于内存和指针管理的问题(我认为)。我试图弄清楚如何编写和读取二进制文件并设法废弃一个示例程序,但是当我尝试使用我自己的结构调整错误时,错误会不断出现。
继承我的代码:
#include "stdafx.h"
#include <fstream>
#include <iostream>
struct Data
{
std::string name;
unsigned int age;
};
int _tmain(int argc, _TCHAR* argv[])
{
/* Here is the part which I only ran the first time to write the file
std::ofstream oFile("foo.bin", std::ios::out | std::ios::binary);
Data data;
data.name = "Brian";
data.age = 32;
oFile.seekp(0);
oFile.write((char*)&data, sizeof(Data));
oFile.close();
*/
std::ifstream iFile("foo.bin", std::ios::in | std::ios::binary);
Data* buffer = new Data;
iFile.read((char*)buffer, sizeof(Data));
iFile.close();
std::cout << buffer->name.c_str() << std::endl;
delete buffer;
return 0;
}
如果忽略缓冲区的已分配空间,程序运行正常,但这会导致内存泄漏吗?如果有人愿意花点时间指出我的代码中的错误,或者如果我的方法有误,请指导我正确的方向,我将不胜感激。
答案 0 :(得分:0)
这些陈述
iFile.read((char*)buffer, sizeof(Data));
//...
std::cout << buffer->name.c_str() << std::endl;
毫无意义。类std :: string在内部使用一些指向已分配内存的指针。当您读入结构时,数据成员名称具有一些与程序中实际分配的内存不对应的任意值。您读取二进制数据的方法无效。