gpt4 book ai didi

c++ - SIGABRT 二进制读/写

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

我写了一个非常小的代码片段并且已经得到了以下错误:

malloc:对象 0x100100080 的 *** 错误:未分配正在释放的指针

问题是,我不知道编译器在谈论什么指针。我通过地址将一个变量传递给读/写函数,但据我所知我从未释放过它。我的代码哪里出错了?我用 Leaks and Zombies 运行它,但什么也没得到。

这是我的程序:

#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;

class Bank
{
private:
string __name;

public:
Bank()
{
__name = "";
}
Bank(string name)
{
__name = name;
}

string getName() const { return __name; }
};


int main (int argc, char * const argv[])
{
Bank bank("Bank of America");
Bank bank2;

cout << "Bank1: " << bank.getName() << endl;
string filename = bank.getName() + ".bank";

ofstream fout(filename.c_str(), ios::binary);
if (fout.good())
fout.write((char *)&bank, sizeof(bank));
fout.close();

ifstream fin(filename.c_str(), ios::binary);
if (fin.good())
fin.read((char *)&bank2, sizeof(bank2));
fin.close();

cout << "Bank2: " << bank2.getName() << endl;

return 0;
}

最佳答案

您不能使用 fin.read() 读取包含 std::string(或任何非普通数据)的对象--

对象以字节流的形式读写,但 std:string 包含一个指向存储在别处的内存的指针,它不是用你的 fout.write() 写入的,也没有用你的 fin.read( )

这是因为你的 fin.read() 没有正确初始化你得到堆错误;当对象超出范围时,将调用未正确初始化的 std::string 的析构函数,并尝试释放它不拥有的内存。

您可能想为您的对象编写一个自定义的 i/o 方法并逐个保存或加载它。要获得执行此操作的快捷方式,请使用 Boost 序列化库。

关于c++ - SIGABRT 二进制读/写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9433479/

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