【问题标题】:Boost serialization of vectors, crash in release build提升向量的序列化,在发布版本中崩溃
【发布时间】:2013-03-12 10:46:58
【问题描述】:

我正在尝试基本的 Boost 序列化示例。在尝试传递向量时,我遇到了此代码的问题:

#include <iostream>
#include <vector>
#include <fstream>
#include <sstream>
#include <queue>
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/serialization/list.hpp>
#include <boost/serialization/vector.hpp>

using namespace std;
stringstream ss (stringstream::in | stringstream::out);

void save()
{
  boost::archive::text_oarchive oa(ss);

  vector<int> v;
  v.push_back( 228 );
  v.push_back( 322 );

  oa << BOOST_SERIALIZATION_NVP(v);
}

void load()
{
  boost::archive::text_iarchive ia(ss);
  vector<int> tV;
  ia >> BOOST_SERIALIZATION_NVP(tV) ;
  std::cout << "Hello" << std::endl ;
}

int main()
{    
    save();
    load();

   return 0;
}

在发布模式下:程序崩溃而不打印 Hello 消息。

在调试模式下: 程序打印 Hello 消息并正常关闭。我在调试模式下看到了向量 tV 的值,它显示了正确填充的值。

我可能做错了什么?

附: :我确实在 SO 上检查过类似的问题,但与我的问题没有真正的关系。


根据 cmets 编辑:

void save()
{
  boost::archive::text_oarchive oa(ss);

  vector<int> v;
  v.push_back( 228 );
  v.push_back( 322 );

  oa << v;
}

void load()
{
  boost::archive::text_iarchive ia(ss);
  vector<int> ;
  ia >> v ;
  std::cout << "Hello" << std::endl ;
}

【问题讨论】:

  • 是 boost::serialization 装备来只处理 std::vector 这样的?
  • 你应该在保存和加载中都使用 BOOST_SERIALIZATION_NVP,变量名相同。
  • @EvgenyPanasyuk 谢谢。我添加了那个(并编辑了我的帖子),但仍然是同样的崩溃。 with same variable name 是什么意思?
  • 就像@EvgenyPanasyuk 说的——当使用 BOOST_SERIALIZATION_NVP 时,两个变量应该有相同的名称(将tV 更改为v)。该宏使用 BOOST_PP_STRINGIZE 将变量名称转换为稍后用于 XML 中标记命名的字符串。但是你在这里使用text_archive,所以你可以在两个函数中删除 BOOST_SERIALIZATION_NVP
  • FWIW,在 MSVC10、Win7、boost 1.53 下运行正常。 (但是你误用了 BOOST_SERIALIZATION_NVP,正如已经提到的。)

标签: c++ serialization boost boost-serialization


【解决方案1】:

我的猜测是您在发布模式下违反了 ODR。

确保使用与构建 serialization lib 完全相同的宏来构建程序。特别注意_SECURE_SCL宏。

【讨论】:

    猜你喜欢
    • 2012-08-26
    • 1970-01-01
    • 2020-08-06
    • 2021-06-12
    • 2017-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多