gpt4 book ai didi

c++ - 尝试读取对象 vector 时程序崩溃

转载 作者:行者123 更新时间:2023-11-28 00:41:50 28 4
gpt4 key购买 nike

我有以下类,它有一个对象 vector 。当我使用类对象读取 vector 的值时,程序崩溃了。我什至尝试放入一个try block ,但控件不会进入catch block

这本书类:

class Book
{
public:
char isbn[11];
char name[50];
char author_name[50];
char pub_name[50];
char edition[10];
float cost;
char dept[10];
int count;
char id[8];

};

这是 Library 类,它包含一个 Book 类的 vector

class Library
{
public:
char l_name[50];
char admin_name[50];
int phone_no;
char location[50];
vector<Book> v;
};

这是主要功能

int main()
{

Library lib; //LIBRARY OBJECT
Book b; //BOOK OBJECT

fstream fp("library1.bin",ios::in | ios::binary); //OPEN FILE IN READ MODE
if(!fp) cout<<"reading failed...";
try
{

fp.read(reinterpret_cast<char *>(&lib),sizeof(lib)); //READ LIBRARY DETAILS
if(fp.bad() == true) cout<<"Read failure..."<<endl;
fp.close();

cout<<"Enter ISBN number:"; cin>>b.isbn; //READ ISDN NUMBER FROM USER



for(int i=0;i<lib.v.size();i++) //CHECK WHETHER BOOK ALREADY EXISTS
{
Book b1 = lib.v[i];
if(strcmp(b1.isbn,b.isbn) == 0)
{
lib.v[i].count++;
}
}
}
catch(exception& e) //CATCH ANY EXCEPTIONS
{
cout<<"Error:"<<e.what()<<endl;
}
catch(...) //CATCH ANY UNCAUGHT EXCEPTIONS
{
cout<<"Unknown error occured:";
}
}

当我尝试检查 ISDN 号码时,程序崩溃了。

最佳答案

包含 vector 基础数据的内存并不存储在 vector 类本身中,只有指向它的指针存储在那里。

因此,当您执行 fstream::read 时,您正在使用指向内存中某个随机位置的指针来初始化此 vector(其中 vector 数据在你写的时候就被找到了,这很可能是不可访问的或者数据早就消失了,除非你在程序的当前运行期间写了它并且 vector 仍然在范围内),因此任何访问数据的尝试都将导致未定义的行为。

我建议您不要尝试直接使用 fstream::read 恢复您的类,因为让它工作可能有点困难(更不用说随之而来的大量可能问题) it), 而不是将成员一个一个地写入文件/从文件中读取成员。

关于c++ - 尝试读取对象 vector 时程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18515526/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com