Я пытаюсь выполнить сериализации с использованием библиотеки сериализации Boost, но они всегда терпят неудачу с той же бесполезной ошибкой времени выполнения. Скажем, у меня есть простая структура:Нарушение доступа к памяти при использовании Boost :: Serialization
struct test {
unsigned int value;
template<class Archive>
void serialize(Archive & ar, unsigned int const version)
{
ar & BOOST_SERIALIZATION_NVP(value);
}
};
Это компилируется отлично. Затем я делаю круглую поездку с сохранением объекта типа test
для архивации и загрузки его обратно.
BOOST_AUTO_TEST_CASE(test_serialization)
{
test a{42};
stringstream ss;
text_oarchive oa(ss);
oa << BOOST_SERIALIZATION_NVP(a);
}
// ... lots of other tests that pass fine
Это также компилируется в порядке. Однако при запуске пакета я получаю следующую ошибку.
Entering test case "test_serialization"
unknown location(0): fatal error in "test_serialization": memory access violation at address: 0x00000038: no mapping at fault address
Test is aborted
Все остальные тесты, за исключением сериализации, выполняются, как ожидалось.
В чем может быть проблема?
Мои настройки:
Ubuntu 14.04
boost 1.57/boost 1.58
clang 3.4/gcc 4.8.2
Здание с -lboost_serialization -lboost_unit_test_framework
.
звучит как [UB] (http://en.wikipedia.org/wiki/Undefined_behavior) для меня. Вы уверены, что вы (повторно) скомпилированы (все) против версий библиотек времени исполнения, которые вы на самом деле используете? – sehe
Предоставленный код работает без исключений. См. Это [онлайн] (http://coliru.stacked-crooked.com/a/135f5c0c3a35029a) – megabyte1024