为什么这个cpp项目失败了?
Why does this cpp program fail?
注意:当我在调试时,我发现直到最后一行,程序运行正常,但是当经过最后一个括号时,会弹出一个错误窗口。我不太熟悉c++,所以找不到问题所在。请帮助!
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
class test {
public:
int x;
void add_list(int);
void display();
private:
vector<int> list;
};
void test::add_list(int op)
{
list.push_back(op);
}
void test::display()
{
cout << x << endl;
for (unsigned int i=0;i<list.size(); i++)
cout << "->" << list[i];
cout << endl;
}
int main (void)
{
test test1;
test1.x = 3;
test1.add_list(2);
test1.add_list(4);
int size = sizeof (test1);
ofstream fout ("data.dat", ios_base::binary);
fout.write((char *)&test1, size);
fout.close();
ifstream fin ("data.dat", ios_base::binary);
test test2;
fin.read((char *)&test2, size);
test2.display();
fin.close();
return 0;
}
以下几行
fout.write((char *)&test1, size);
和
fin.read((char *)&test2, size);
不能工作,因为test
类包含包含指针的对象。std::list
将使用new
分配额外的内存来存储推送到它上的项目。然后,它将保留指向这些项的指针。当您将对象写入磁盘时,它仍将包含指向内存的指针。当您再次加载对象时,指针将包含相同的值,但您的程序可能没有分配相同的内存,当然也不会为对象分配内存。
在您的情况下,test2
似乎可以工作,因为它的内部指针最终与test1
相同,但是当您编程完成时,test1
析构函数释放它分配的内存,然后test2
析构函数试图释放相同的内存,导致您的错误。
要解决这个问题,你应该修改代码,以一种不使用指针的定义格式来编写对象(例如,写出项目计数,然后是每个项目的整数值)。然后用同样的方法读它们。一个简单的fwrite是做不到的
相关文章:
- 我必须构建我的项目 2 次,第一次失败,因为它无法打开库
- 我的快速排序在对预排序的项目进行排序时失败,如何改进?
- 在 macOS 上的 CLion 中导入 Bazel 项目失败
- VS 2017 构建工具失败,出现错误 MSB4019:找不到导入的项目"D:Microsoft.Cpp.Default.props"
- MSBuidel - 将资源文件添加到项目后静态库编译失败
- C++单元测试项目 LoadLibrary 失败,出现"序号未找到"错误
- Unity webGL - MacOS 上的构建项目失败
- 链接在XLNT.TEST项目上失败,具有10个未经介绍的外部链接:
- 项目生成失败:"gcroot.h This document is opened by another project"
- Aruco建筑项目失败
- 与iOS项目上的C 库链接失败
- 在项目c++中包含本地路径,但生成失败
- C++项目生成失败
- 通过终端和编译创建项目文件失败,但通过Qt Creator IDE工作正常
- 构建最小的Qt控制台项目失败,出现神秘的链接器错误LNK2001:未解析的外部符号
- Visual Studio 2010 Express创建项目失败
- 代码使用cmake干净地构建,当作为外部项目添加时失败
- 使用GCC编译时,CMake生成的Ninja项目失败
- <int> 具有初始值设定项列表的 QVector 失败,并显示 3 个项目
- 在eclipse ubuntu上构建opencv项目失败