1

基本的な 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 の値を確認しましたが、正しく入力された値が表示されていました。

私が間違っているかもしれないのは何ですか?

PS: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 ;
}
4

1 に答える 1

2

私の推測では、リリースモードでODR違反が発生しています。

serializationlibがビルドされたのとまったく同じマクロを使用してプログラムをビルドするようにしてください。_SECURE_SCL特に、マクロに注意してください。

于 2013-03-12T14:39:42.230 に答える