Повысьте сериализацию векторов, вылетает при сборке релиза.

Я пытаюсь основные примеры сериализации 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 ;
}

1

Решение

Я предполагаю, что у вас есть нарушение ODR в режиме выпуска.

Убедитесь, что вы строите свою программу с теми же макросами, что и serialization lib был построен с. В частности, обратите внимание на _SECURE_SCL макро.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector