free() 中的错误:大小无效

安吉特
#include <bits/stdc++.h>

using namespace std;

class student
{
 string name;
 string reg;
public:
 void getdata()
 {
  getline(cin,name);
  getline(cin,reg);
 }
 void printdata()
 {
  cout<<name<<"\t"<<reg<<endl;
 }
};

int main()
{
 ifstream fin;
 ofstream fout;
 student obj;
 fout.open("google.txt",ios::out|ios::binary);
 obj.getdata();
 fout.write((char*)&obj,sizeof(obj));
 fout.close();
 student obj2;
 fin.open("google.txt",ios::in|ios::binary);
 fin.read((char*)&obj2,sizeof(obj2));
 obj2.printdata();
 fin.close();
 return 0;
}

我正在尝试对对象进行文件处理的基本读写操作。但是在执行上面的代码后,我可以成功地读写,但是我收到一条错误消息*** Error in ./io: free(): invalid size: 0x00007ffea93f64b0 ***Aborted (core dumped)

输入:Fire Blade、17HFi394 输出:
Fire Blade、17HFi394 和一条错误消息:*** Error in ./io: free(): invalid size: 0x00007ffea93f64b0 ***Aborted (core dumped)谁能解释这个错误,我应该怎么做才能克服这个问题。

某程序员哥们

问题是因为您将原始std::string对象写入文件,然后再次读取。这会导致未定义的行为

这不起作用,因为 astd::string基本上(并简化)只是指向实际字符串数据的指针。当你写字符串对象时,你写的是指针,当你从文件中读回对象时,你读的是指针。问题是现在您有两个字符串对象都指向相同的数据。当第一个对象超出范围并被破坏时,它会释放字符串数据,让另一个对象具有指向不再属于您的进程的数据的无效指针。当第二个对象被破坏时,它将尝试释放已经释放的数据。

这仅适用于在单个进程中保存和加载对象的情况。如果您试图在不同的进程中加载​​对象(即使它是同一个程序),情况会更糟,对于现代虚拟内存系统,没有两个进程具有相同的内存映射。

要将数据保存到文件,您应该研究序列化

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

遇到错误“ *** glibc检测到*** free():下一个大小无效(快速)”

C-错误为“ free():下一个大小无效(正常)”

''中的C ++错误:free():无效的指针

***`./pw'中的错误:free():无效的指针:0x0000000000602200 ***

尝试释放数组内存时出现“ free():下一个大小(快速)无效”错误

C ++运行时错误:free():下一个大小无效(快速)

./thrash中的错误:free():无效的指针

错误:free():下一个大小无效(快速)

./a.out中的错误:free():释放动态分配的二维结构数组时,下一个大小(常规)无效

free():下一个大小无效(正常)&munmap_chunk():C中的无效指针

随机错误核心转储:`./a.out'中的错误:free():下一个大小无效(快速):0x00000000010e8d70 ***中止(核心转储)

Free():C程序中的无效指针

使用malloc和free:下一个大小错误无效

pthread_join free():无效的指针错误

如何调试free():Python / Kivy中无效的nex大小错误?

调试无效的free()

使用mysql_free_result“大小为1的无效读取”

C ++错误:Free()下一个大小无效(快速)

'a.out'中的错误:free():下一个大小无效(正常)

动态内存结构:free()失败,且大小无效

'./a.out'中的错误:free():无效***`./allum1'中的错误:free():下一尺寸无效(快速):0x00000000023e13f0 ***

我如何找到错误:***`./a.out'中的错误:free():无效的下一个大小(快速):0x09767150 ***

赋值运算符中的free()/ delete / delete [] / realloc()无效错误

错误glibc检测到free():下一个大小无效(快速)

C ++删除指针映射:free()无效大小

C ++ free():下一个大小无效(快速)

malloc/free double free 或损坏错误

free(): 执行 free 时下一个大小无效(正常)

`/tmp/Main' 中的错误:free():下一个大小无效(快速):没有动态分配