我有一个像这样的POD结构简单的东西...

struct Actor
{
    string name; 
    int hp;
};

稍后,为简便起见,我使用...将结构保存到文件中。

 ofstream_obj.write((char *)&PC, sizeof(Actor));

然后,我尝试将文件读回。 它加载了数据,但是在退出时却给出了一个丑陋的异常,在以下行中指向xutility:* _Pnext!= 0

inline void _Container_base12::_Orphan_all()
    {   // orphan all iterators
 #if _ITERATOR_DEBUG_LEVEL == 2
    if (_Myproxy != 0)
        {   // proxy allocated, drain it
        _Lockit _Lock(_LOCK_DEBUG);

        for (_Iterator_base12 **_Pnext = &_Myproxy->_Myfirstiter;
            *_Pnext != 0; *_Pnext = (*_Pnext)->_Mynextiter)
            (*_Pnext)->_Myproxy = 0;
        _Myproxy->_Myfirstiter = 0;
        }
 #endif /* _ITERATOR_DEBUG_LEVEL == 2 */
    }

放弃后,我将std :: string更改为char name [20],再次尝试了整个操作,并且工作正常。 加载std :: string有什么不同吗? 它不是在调用std :: string的副本构造函数吗?

===============>>#1 票数:3 已采纳

std::string内部保存一个指向实际在堆上分配的字符串数据的指针。

write(char*, size_t)不考虑内部类型(以及关联的副本构造函数) AT ALL 这意味着您正在编写一个指向文件的指针,该指针永远无法工作。

要正确修复它,您将需要实际的序列化以正确地写出字符串(例如写长度,然后是数据)

  ask by Phil translate from so

未解决问题?本站智能推荐:

1回复

如何使用tpl序列化“ std :: string”

我想将std :: string序列化为tpl_map(“ s”,...),但不起作用。 在运行时抛出异常 HelloCppWin32.exe!tpl_pack(tpl_node * r,int i)1864行
1回复

如何在C ++中使用继承序列化类

我想序列化属于继承的类。 我正在使用C ++ 98,没有任何第三方库。 这是我的课程结构: 通过朋友技术,我可以使用ofstream和fstream序列化基本类。 但是我无法弄清楚在我的基类具有纯虚函数的情况下如何实现序列化。
2回复

C ++:如何在不使用库的情况下序列化/反序列化对象?

我试图理解序列化/反序列化如何在不使用库的情况下在C ++中工作。 我从简单的对象开始,但是当反序列化向量时,我发现,如果没有先写入它的大小,我就无法获得向量。 而且,我不知道应该选择哪种文件格式,因为如果在向量大小之前存在数字,我就无法正确读取它。 此外,我想用类和映射容器来做到这一点。
1回复

在C ++中使用Boost的命名管道序列化对象

我正在尝试使用Boost库对来自命令行应用程序的一些EEG数据进行序列化以进行序列化,并通过命名管道将该序列化的数据发送到Visual Studio C ++ 2010中内置的用户界面Form。 从boost库教程中,我可以序列化我的数据结构,并且http://www.boost.org/
1回复

将对象的向量序列化为std :: string以与MPI一起使用

我正在尝试通过MPI传递大小不同的std::vector<MyClass> 。 MyClass包含的成员是可能未初始化或大小不同的向量。 为此,我编写了一个serialize()和deserialize()函数,将这样的std::vector<MyClass>读写到s
2回复

如何在C ++中使用派生类进行Boost序列化?

我试图使用Boost的序列化功能来序列化派生类。 我的基类没有不同的数据成员,因此派生类只有这个serialize()函数: 然后基类有这个serialize()函数: 将其添加到基类没有任何区别: 该程序编译得很好。 main()生成一些虚拟数据,将其打印到stdo
2回复

C ++序列化std :: error_code以便通过网络传输或保存到磁盘?

我想序列化std :: error_code,通过网络传输它,然后再次反序列化。 无论如何,还是我需要一个将整数值映射到std :: error_code或从std :: error_code映射出的转换表(切换用例)? 谢谢。
7回复

序列化包含std :: string的类

我不是c ++专家,但过去已经将序列化了几次。 不幸的是,这一次我试图序列化一个包含std :: string的类,我理解这很像序列化一个指针。 我可以将类写入文件,然后再次读回。 所有int字段都可以,但是std :: string字段给出“地址超出范围”错误,大概是因为它指向的数据
2回复

序列化包含std :: string的自定义结构

我正在寻找序列化包含std :: string的类到文件,并轻松地在Python中加载此数据: 我有一个非常繁忙的线程,可以处理许多A实例。它需要一些有趣的实例,并将它们添加到一个类中,以便以后不那么繁忙的线程编写。 然后,低优先级线程将blob异步写入文件:file.write
3回复

使用序列化C ++保存游戏状态

我有一个名为Game的类,其中包含以下内容: 我的问题是,如何将这些(保存)写入文件并稍后读取/加载? 我想过在这里使用带有这些的struct ,只是保存struct但我不知道从哪里开始。 这是我到目前为止的尝试,只是试图挽救change 。 我已经阅读了很多关于这个问题和我的