提升向量的序列化,在发布版本中崩溃

时间:2013-03-12 10:46:59

标签: c++ serialization boost boost-serialization

我正在尝试基本的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的值,它显示了正确填充的值。

我可能做错了什么?

P.S。 :我确实在SO上检查过类似的问题,但与我的问题无关。


根据评论进行修改:

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 ;
}

1 个答案:

答案 0 :(得分:2)

我的猜测是你在发布模式下遇到了ODR违规行为。

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