我有一个像这样的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

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