gpt4 book ai didi

c++ - 我的 C++ 程序在尝试输出从文件读取的数据时崩溃

转载 作者:行者123 更新时间:2023-11-30 02:58:03 25 4
gpt4 key购买 nike

我正在尝试制作一个程序来存储员工数据库并将它们存储在外部文件中。从 .dat 文件读取 vector 并将其加载到程序中的函数会读取文件,但每当我尝试显示或修改加载的 vector 时,程序就会崩溃。

//displays vector
void Database:: displayAll() const
{
for(std::vector<Employee>::const_iterator iter = mEmployees.begin(); iter != mEmployees.end(); ++iter)
{
iter -> display();
}

}

std::vector<Employee> mEmployees;

void Database::readData()
{
ifstream empIn("employee.dat" , ios::binary);
empIn.seekg(0,ifstream::end);
long size2 = empIn.tellg();
empIn.seekg(0,ifstream::beg);
mEmployees.resize(size2);
empIn.read((char*)&mEmployees, size2);
empIn.close();
cout << mEmployees.size() << endl; //this tests whether or not it reads.
}

最佳答案

您还没有向我们展示您对 mEmployees 的声明,但我假设它是某种类型的 std::vector。问题是您试图将文件读入 vector 对象,而不是读入其内容。这会破坏 vector 以及它旁边的任何其他内存,从而导致进一步崩溃。

您可能想要的是:

empIn.read((char*)&mEmployees[0], size2);

或在 C++11 中:

empIn.read((char*)mEmployees.data(), size2);

实际将文件的内容读入 vector 内容

要理解为什么会发生这种情况,您应该知道vector内容 并未存储在vector 本身 (他们怎么可能?大小是动态的)。相反,vector 的常见实现具有指向存储区域开始和结束的指针,该存储区域位于自由存储中的某处,内容实际保存在那里。当您尝试将文件读入 vector 的内存布局时,您将覆盖这些指针以及 vector 本身之外的内存,从而破坏 vector 等。

关于c++ - 我的 C++ 程序在尝试输出从文件读取的数据时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14035619/

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