在类 12.exe 中0x7B37FF80 (ucrtbased.dll) 引发异常: 0xC0000005:访问冲突读

Exception thrown at 0x7B37FF80 (ucrtbased.dll) in Class 12.exe: 0xC0000005: Access violation reading location 0x00B64F88. occurred

本文关键字:异常 0xC0000005 访问冲突 dll exe 0x7B37FF80 ucrtbased 在类      更新时间:2023-10-16

我对 c++ 相当陌生。我正在使用Visual Studio IDE。我正在学习如何将对象发送到文件以及如何检索它们。在检索时,我在那个地方得到了一个异常。我不知道该怎么办

#include <iostream>
#include <fstream>
class Entity 
{
public:
int ID;
const char* name;
Entity(): ID(-1), name("NOT ASSIGNED") {}
Entity(int a, const char* b) : ID(a), name(b) {}
};
std::ostream& operator<<(std::ostream& stream, Entity &e) 
{
stream << e.ID << " " << e.name << std::endl; //exception is thrown here
return stream;
}
void WriteToFile(Entity e)
{
std::cout << "Writing to filen";
std::ofstream fout("ENTITY.txt", std::ios::app|std::ios::binary);
fout.write((char*)&e, sizeof(e));
fout.close();
}
void ReadFromFile()
{
std::ifstream fin("ENTITY.txt", std::ios::binary | std::ios::in);
while (!fin.eof())
{
Entity a;
fin.read((char*)&a, sizeof(a));
std::cout << a;
}
}
int main()
{
Entity a(1, "A");
Entity b(15, "C");
Entity x;
WriteToFile(a);
WriteToFile(b);
WriteToFile(x);
ReadFromFile();
}

我不知道你从哪里学习,但如果它没有告诉你istream::readostream::write不能用于Entity等对象,那就不是很好了。

为了使用read并且write对象必须是POD 类型,POD代表普通旧数据。此外,任何带有指针的东西都不会工作(因为write会写入指针本身,而不是指针指向的内容,并且指针值在read再次读取时不太可能有效(。

您尝试执行的操作称为序列化,它在C++中比其他一些语言更复杂。因此,您可能应该查看序列化库。例如提升序列化

相关文章: