|
Boost Users : |
From: Konstantin Andreev (plafcow4odno_at_[hidden])
Date: 2006-09-17 15:25:32
When
1) trying to restore from archive the pointer to sample class, and
2) archive is over at this moment
boost::serialization causes Access Violation Fault in
file: basic_iarchive.cpp, line 470:
bpis_ptr = co.bpis_ptr;
The code to reproduce the fault follows.
-- Konstantin Andreev. ------------------------( cut here )---------------------- #include <iostream> #include <sstream> #include <boost/archive/text_iarchive.hpp> #include <boost/archive/text_oarchive.hpp> class Sample { private: int pod_int; std::string pod_str; template<class Archive> void serialize(Archive & ar, const unsigned int ){ ar & pod_int & pod_str; }; friend class boost::serialization::access; friend std::ostream & operator<<(std::ostream & os, const Sample & sa ); public: Sample() {}; Sample( int _i, std::string _s ) : pod_int( _i), pod_str( _s ) {}; }; BOOST_CLASS_TRACKING(Sample, track_never) BOOST_CLASS_VERSION(Sample, 19) std::ostream & operator<<(std::ostream & os, const Sample & sa ) { return os << "-- int: " << sa.pod_int << ", str: >" << sa.pod_str << "< at 0x " << &sa << '\n'; } int main( void ) { Sample *obj_to = NULL; const Sample * const obj_fr = new Sample( 55, "**** test string *****" ); std::cout << *obj_fr; std::stringstream archbuf; boost::archive::text_oarchive *oa = new boost::archive::text_oarchive( archbuf, 3 ); *oa << obj_fr; std::cout << "-- archive content: >" << archbuf.str() << "<\n"; delete oa; boost::archive::text_iarchive *ia = new boost::archive::text_iarchive( archbuf, 3 ); *ia >> obj_to; std::cout << *obj_to; /////////////////////////////////// *ia >> obj_to; // ARCHIVE IS OVER. BOOM !!! /////////////////////////////////// std::cout << *obj_to; delete ia; return 0; }
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net