2013-03-20 89 views
0

我想在boost :: serialization中使用boost :: multi_index_container。但是,當我使用指針作爲元素和non_unique順序時,我得到加載序列化容器的內存訪問衝突。我覺得有趣的是,對於唯一排序或使用對象而不是指針作爲容器元素,錯誤不會發生。boost multi_index_container序列化

有人可以告訴我,如果我的代碼存在問題,或者這是否是boost庫中的錯誤?

這裏是產生所描述的誤差最小的例如:

#include <boost/multi_index_container.hpp> 
#include <boost/archive/binary_oarchive.hpp> 
#include <boost/archive/binary_iarchive.hpp> 
#include <boost/serialization/set.hpp> 
#include <boost/lexical_cast.hpp> 

#include <boost/multi_index/ordered_index.hpp> 
#include <boost/multi_index/member.hpp> 

#include <fstream> 

using namespace std; 
using namespace boost::multi_index; 


struct element { 

    friend class boost::serialization::access; 

    std::string member1; 

    element(int num) { member1 = boost::lexical_cast<string>(num); } 
    element() {} 

    template<class Archive> 
    void serialize(Archive & ar, const unsigned int version) 
    { 
     ar & member1; 
    } 
}; 

int main(int argc, const char *argv[]) 
{ 

    typedef multi_index_container<element *, indexed_by<ordered_non_unique<member<element, std::string, &element::member1>>>> TestSet; 

    TestSet myset; 

    srand(time (NULL)); 
    for (int i = 0; i < 20; i++) { 
     myset.insert(new element(rand())); 
    } 

    // Write set 
    ofstream os("test.bin"); 
    boost::archive::binary_oarchive boa(os); 

    boa << myset; 
    os.close(); 

    // Read set 
    TestSet newset; 
    ifstream is("test.bin"); 
    boost::archive::binary_iarchive bia(is); 

    bia >> newset; 

    return 0; 
} 

回答

1

應該是: ofstream os("test.bin", ios::binary);

另外:

ifstream is("test.bin");應該是:ifstream is("test.bin", ios::binary);

+0

謝謝,這是問題! – Martin 2013-03-20 19:36:22