ifstream ifile("Library.dat",ios::in|ios::binary);
Book *book_obj=new Book; //Book is the class name
if(ifile)
{
while(ifile.read((char*)book_obj,sizeof(Book)))
book_obj->Display_BookDetails();
}
ifile.close();
delete book_obj; //Runtime Error is coming here.If I comment out this, then it works fine
我正在从名为 Library.dat 的文件中读取内容。当我执行上面的代码时,我收到运行时错误访问冲突读取位置0x004B9B44。注释掉删除book_obj工作得很好。我应该如何删除book_obj以阻止内存泄漏。
您的类包含非 POD 成员。您无法在不遇到问题的情况下将结构读取为字节块。您必须通过创建自己的 std::istream& operator>>(std::istream&, Book&)
函数自行序列化:
std::istream& operator>>(std::istream& is, Book& b)
{
// extract individually into b's data members
}
现在您可以执行以下操作:
while (ifile >> book_obj)
{
book_obj->Display_BookDetails();
}