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