我正在尝试使用fstream
将对象写入文件并在读取后显示在屏幕上,但是当我尝试使用cout显示读取的对象时,出现错误消息Segmentation fault: 11
。有人能帮我解决这个代码问题吗?谢谢!
Produto *p1 = new Produto(1, "Refrigerante");
cout << "Produto p1 (pre serializacao): (" << p1->codigo << ") " << p1->descricao << endl;
ofstream serializationWriter;
serializationWriter.open("myobject.dat", ios::binary);
serializationWriter.write((char *)&p1, sizeof(p1));
Produto *p2;
ifstream serializationReader;
serializationReader.open("myobject.dat", ios::binary);
serializationReader.read((char *)&p2, sizeof(p2));
cout << "Produto p2 (pos serializacao): (" << p2->codigo << ") " << p2->descricao << endl;
&p2
是一个指向指针的指针,即Produto**
。你可能想将p2
声明为一个实例,例如Produto p2
。 - David Gwrite
之后,你不也需要关闭文件吗? - vsoftcoserializationWriter.write((char *)&p1, sizeof(p1));
这个变量名字起得不太准确。你并没有“序列化”数据——你所做的只是将一堆字节写入文件。你不能用这种方式序列化非 POD 对象。 - PaulMcKenziep2
中。 - R Sahu