_block_type_is_valid(phead- nblockuse)因为删除命令


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();
}

相关内容

最新更新