在类 12.exe 中的 0x7B37FF80 (ucrtbased.dll) 处引发异常:0xC0000005:访问冲突读取位置 0x00B64F88。发生了
Posted
技术标签:
【中文标题】在类 12.exe 中的 0x7B37FF80 (ucrtbased.dll) 处引发异常:0xC0000005:访问冲突读取位置 0x00B64F88。发生了【英文标题】:Exception thrown at 0x7B37FF80 (ucrtbased.dll) in Class 12.exe: 0xC0000005: Access violation reading location 0x00B64F88. occurred 【发布时间】:2020-06-21 08:12:23 【问题描述】:我对 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 file\n";
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();
【问题讨论】:
生成的文件内容是否符合预期?无论如何,作为这里的新用户,请带上tour阅读How to Ask。 【参考方案1】:我不知道你从哪里学习,但如果它没有告诉你 istream::read
和 ostream::write
不能用于诸如 Entity
之类的对象,那就不是很好了。
为了使用read
和write
,对象必须是POD 类型,POD 代表plain old data。此外,任何带有指针的东西都不起作用(因为write
将写入指针本身,而不是指针指向的内容,并且当read
再次读取时,指针值不太可能有效)。
您尝试执行的操作称为序列化,它在 C++ 中比在其他一些语言中更复杂。因此,您可能应该查看一个序列化库。比如boost serialization
【讨论】:
以上是关于在类 12.exe 中的 0x7B37FF80 (ucrtbased.dll) 处引发异常:0xC0000005:访问冲突读取位置 0x00B64F88。发生了的主要内容,如果未能解决你的问题,请参考以下文章
线程 1:“-[Xylophone.ViewController buttonClicked:]:无法识别的选择器发送到实例 0x7ff83a6074e0”