2015-04-23 1 views
0

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

+1

звучит как [UB] (http://en.wikipedia.org/wiki/Undefined_behavior) для меня. Вы уверены, что вы (повторно) скомпилированы (все) против версий библиотек времени исполнения, которые вы на самом деле используете? – sehe

+1

Предоставленный код работает без исключений. См. Это [онлайн] (http://coliru.stacked-crooked.com/a/135f5c0c3a35029a) – megabyte1024

ответ

0

Поскольку у меня было несколько импульсных установок, включенные заголовки были от версии 1.57/1.58, а библиотека libboost_serialization.so - от версии 1.54.

Я перекомпилировал с -L/actual/latest/boost/lib/path -lboost_serialization -lboost_unit_test_framework, и это сработало.

Смежные вопросы