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