Я пытаюсь основные примеры сериализации 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, но не мог действительно относиться к моей проблеме.
Редактировать согласно комментариям:
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 ;
}
Я предполагаю, что у вас есть нарушение ODR в режиме выпуска.
Убедитесь, что вы строите свою программу с теми же макросами, что и serialization
lib был построен с. В частности, обратите внимание на _SECURE_SCL
макро.
Других решений пока нет …