2015-04-23 49 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,它工作。