fstream二进制读写问题

今日在写代码的过程中,使用fstream类对文件进行写入&读取操作,在程序结尾处总会抛出访问了已经释放过的内存的异常,经过耐心调试,终于发现了问题所在。

起初我定义了一个简单的结构体:

struct Info
{
    char _ch;
    int _count;
    string _str;
};

并使用fstream的二进制读写方式,直接将该结构体创建的对象写入一个文件中,之后又从文件中以二进制方式读取出结构体的数据并直接赋值给一个结构体对象。这样做是十分不对的。

问题所在

问题就出在结构体中的stirng类,string是STL中定义好的一个类,在模拟实现string类的过程中,可以知道,在string类的内部,一定存在一个或多个指向堆空间的指针,而当一个string类使用完成时,string类会自行调用它的析构函数来释放stirng类中指针指向的堆空间。而当我一二进制的方式,直接将string的数据写入文件时,自然也会将string类中指向堆空间的指针写入进去,之后读出时,就会造成出现两个string类对象指向同一块堆空间的现象,而一份堆空间被析构两次,自然是不被允许的。

当要以二进制读写将数据写入一个文件时,只有POD类型的数据可以安全的写入到文件中之后再读取出来

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值