在类 12.exe 中0x7B37FF80 (ucrtbased.dll) 引发异常: 0xC0000005:访问冲突读
Exception thrown at 0x7B37FF80 (ucrtbased.dll) in Class 12.exe: 0xC0000005: Access violation reading location 0x00B64F88. occurred
我对 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::read
和ostream::write
不能用于Entity
等对象,那就不是很好了。
为了使用read
并且write
对象必须是POD 类型,POD代表普通旧数据。此外,任何带有指针的东西都不会工作(因为write
会写入指针本身,而不是指针指向的内容,并且指针值在read
再次读取时不太可能有效(。
您尝试执行的操作称为序列化,它在C++中比其他一些语言更复杂。因此,您可能应该查看序列化库。例如提升序列化
相关文章:
- 在类 12.exe 中0x7B37FF80 (ucrtbased.dll) 引发异常: 0xC0000005:访问冲突读
- (此函数用于计算 SMA).在 FA.exe 中0x00509159引发异常: 0xC0000005:访问冲突读取位置0
- mystring.exe中的0x0FC9E559(ucrtbaseed.dll)的未经手法异常:0xc0000005:访
- 在2.exe中的0x00DE181818的未经手法异常:0xc0000005:访问违规写作位置0xcd7cbe10
- 在 DirectXGame.exe 中0x00B84CD6出现未经处理的异常:0xC0000005:访问冲突读取位置0x
- BunkerBuilder.exe中0x0070C75C处的首次机会异常:0xC0000005:写入位置0xCCCCC0
- 引擎.exe 0x00000000时未处理的异常: 0xC0000005:访问冲突
- main.exe 中0x779615de处未处理的异常:0xC0000005:访问违规写入位置0x003f0014
- 错误 linkedlist .exe 中0x00D0345E处的未处理异常: 0xC0000005:访问违规写入位置0x
- 首次插入静态 STL 集会导致引发未经处理的异常0xC0000005:引发访问冲突
- 程序.exe中0x010F2F1C时未处理的异常: 0xC0000005:访问冲突读取位置0xCCCCCCD0
- 第 1 章.exe中0x003860EF未处理的异常: 0xC0000005:访问违规写入位置0x0038EE7C
- opencv_helloworld.exe中0x778715de处未处理的异常:0xC0000005:读取位置0x000
- ConsoleApplication2.exe中的首次机会异常:0xC0000005:写入访问冲突,c++
- ..中0x00C87963处出现未处理的异常:0xC0000005:读取位置0xCCCCCCE0时发生访问冲突
- application.exe中0x0872340b(CAN.dll)处未处理的异常:0xC0000005:读取位置0x
- C++:xxx中0x00101890处未处理的异常:0xC0000005:读取位置0xcccccccc的访问冲突
- 模拟时钟.exe 0x00BF57F9时未处理的异常: 0xC0000005:访问冲突读取位置0x00000000
- 日志含义glBufferSubData导致未处理异常:0xC0000005
- 在0x5919c8ec (msvcr100d.dll)的第一次机会异常:0xC0000005:访问违反读取位置0xfee