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
。
听起来像[UB](http://en.wikipedia.org/wiki/Undefined_behavior)给我。你确定你(重新)编译(一切)对运行时库实际使用的版本? – sehe
提供的代码无例外地工作。看到它[在线](http://coliru.stacked-crooked.com/a/135f5c0c3a35029a) – megabyte1024