
26 Nov
2007
26 Nov
'07
9:25 a.m.
I'd like to add the following to the above: I tried adding the simple serialization code based on the boost site example to my app and it crashes for both writing and reading the binary archive: #include <string> #include <vector> #include <fstream> #include <boost/archive/binary_oarchive.hpp> #include <boost/archive/binary_iarchive.hpp> #include <boost/serialization/base_object.hpp> using namespace std; class gps_position { private: friend class boost::serialization::access; // When the class Archive corresponds to an output archive, the // & operator is defined similar to <<. Likewise, when the class Archive // is a type of input archive the & operator is defined similar to >>. template<class Archive> void serialize(Archive & ar, const unsigned int version) { ar & degrees; ar & minutes; ar & seconds; for(int i = 0; i < 10; i++) { ar & data[i]; } } int degrees; int minutes; float seconds; double* data; public: gps_position(){}; gps_position(int d, int m, float s) : degrees(d), minutes(m), seconds(s) { data = new double[10]; for(int i = 0; i < 10; i++) { data[i] = i*0.1; } } }; void boost2() { cout << "writing archive..." << endl; std::ofstream bofs("gps.bin", std::ios::binary); // create class instance const gps_position g2(36, 60, 24.567f); boost::archive::binary_oarchive oa(bofs); oa << g2; cout << "reading archive..." << endl; gps_position newg; // create and open an archive for input std::ifstream ifs("gps.bin", std::ios::binary); boost::archive::binary_iarchive ia(ifs); // read class state from archive ia >> newg; cout << "done." << endl; } // calling boost2() crashes - stack shown below: > msvcr80d.dll!memcpy(unsigned char * dst=0xcdcdcdcd, unsigned char * src=0x0012fb44, unsigned long count=1) Line 350 Asm msvcr80d.dll!memcpy_s(void * dst=0xcdcdcdcd, unsigned int sizeInBytes=3452816845, const void * src=0x0012fb44, unsigned int count=1) Line 67 + 0x11 bytes C msvcp80d.dll!std::char_traits<char>::_Copy_s(char * _First1=0xcdcdcdcd, unsigned int _Size_in_bytes=3452816845, const char * _First2=0x0012fb44, unsigned int _Count=1) Line 575 + 0x16 bytes C++ msvcp80d.dll!std::_Traits_helper::copy_s<std::char_traits<char> >(char * _First1=0xcdcdcdcd, unsigned int _Size=3452816845, const char * _First2=0x0012fb44, unsigned int _Count=1, std::_Secure_char_traits_tag __formal={...}) Line 707 + 0x15 bytes C++ msvcp80d.dll!std::_Traits_helper::copy_s<std::char_traits<char> >(char * _First1=0xcdcdcdcd, unsigned int _Size=3452816845, const char * _First2=0x0012fb44, unsigned int _Count=1) Line 699 + 0x21 bytes C++ msvcp80d.dll!std::basic_string<char,std::char_traits<char>,std::_DebugHeapAllocator<char> >::assign(const std::basic_string<char,std::char_traits<char>,std::_DebugHeapAllocator<char> > & _Right="*", unsigned int _Roff=0, unsigned int _Count=4294967295) Line 1021 + 0x25 bytes C++ msvcp80d.dll!std::basic_string<char,std::char_traits<char>,std::_DebugHeapAllocator<char> >::assign(const std::basic_string<char,std::char_traits<char>,std::_DebugHeapAllocator<char> > & _Right="*") Line 1006 C++ msvcp80d.dll!std::basic_string<char,std::char_traits<char>,std::_DebugHeapAllocator<char> >::operator=(const std::basic_string<char,std::char_traits<char>,std::_DebugHeapAllocator<char> > & _Right="*") Line 888 C++ msvcp80d.dll!std::_DebugHeapString::operator=(const std::_DebugHeapString & __that={...}) + 0x13 bytes C++ evviewn.exe!std::locale::locale<boost::archive::codecvt_null<char> >(const std::locale & _Loc={...}, const boost::archive::codecvt_null<char> * _Facptr=0x028f42b8) Line 301 + 0x33 bytes C++ evviewn.exe!boost::archive::add_facet<boost::archive::codecvt_null<char> >(const std::locale & l={...}, boost::archive::codecvt_null<char> * f=0x028f42b8) Line 46 + 0x2a bytes C++ evviewn.exe!boost::archive::basic_binary_oprimitive<boost::archive::binary_oarchive,char,std::char_traits<char> >::basic_binary_oprimitive<boost::archive::binary_oarchive,char,std::char_traits<char> >(std::basic_streambuf<char,std::char_traits<char> > & sb={...}, bool no_codecvt=false) Line 116 + 0x48 bytes C++ evviewn.exe!boost::archive::binary_oarchive_impl<boost::archive::binary_oarchive,char,std::char_traits<char> >::binary_oarchive_impl<boost::archive::binary_oarchive,char,std::char_traits<char> >(std::basic_ostream<char,std::char_traits<char> > & os={...}, unsigned int flags=0) Line 79 + 0x4d bytes C++ evviewn.exe!boost::archive::binary_oarchive::binary_oarchive(std::basic_ostream<char,std::char_traits<char> > & os={...}, unsigned int flags=0) Line 38 + 0x17 bytes C++ evviewn.exe!boost2() Line 277 + 0x14 bytes C++