[serialization1.32/vc7.1]: What's wrong with this class??
Hi I got a access violation on 0x00000000 with the class DDD but I cannot figure out what's wrong When the symbol NO_EXCEPTION is defined, the member acccode is set to an instance of ACCCODE and the serialization is working fine. But when this symbol is undefined, one gets the exception. I am suspecting the input serialization to bypass the loading of the member FIELD* field (which is following the "acccode" member) which leads to an exception when the next member DISP* disp is loaded but I have no way to check it out any idea?? Francis Source code below and also joined in annex ---------------------------------------------------------------------- #include <iostream> #include <fstream> #include <boost/archive/text_iarchive.hpp> #include <boost/archive/text_oarchive.hpp> using namespace std; class FIELD : public string { private: friend class boost::serialization::access; friend std::ostream & operator<<(std::ostream &os, const FIELD&); template<class Archive> void serialize(Archive &ar, const unsigned int version) { ar & boost::serialization::base_object<string>(*this); ar & member; } private: string member; FIELD(){} public: FIELD(const string& name): string(name){} }; class DDD { private: friend class boost::serialization::access; friend std::ostream & operator<<(std::ostream &os, const DDD& dd); template<class Archive> void serialize(Archive &ar, const unsigned int version) { ar & acccode; ar & field; ar & disp; } public: DDD(): acccode(0), disp(0), field(0) {} class ACCCODE { private: friend class boost::serialization::access; friend std::ostream & operator<<( std::ostream &os, const ACCCODE& ); template<class Archive> void serialize(Archive &ar, const unsigned int version) { ar & acccode; } public: string acccode; ACCCODE(){} ACCCODE(const string& s) : acccode(s) {} }; class DISP { private: friend class boost::serialization::access; friend std::ostream & operator<<( std::ostream &os, const DISP& ); template<class Archive> void serialize(Archive &ar, const unsigned int version) { ar & disp; } public: string disp; DISP(){} DISP(const string& s) : disp(s) {} }; public: ACCCODE* acccode; FIELD* field; DISP* disp; }; int main(int argc, char* argv[]) { DDD ddd; #ifdef NO_EXCEPTION ddd.acccode = new DDD::ACCCODE("a"); #endif ddd.field = new FIELD("BAR"); ddd.disp = new DDD::DISP(); const char* file = "TEST.txt"; { std::ofstream os(file); boost::archive::text_oarchive oa(os); oa << ddd; } { std::ifstream is(file); boost::archive::text_iarchive ia(is); ia >> ddd; } } ---------------------------------------------------------------------------- -- A good friend will come bail you out of jail.......... but, a true friend....will be sitting next to you saying: "...that was fun." begin 666 test_serialization.cpp M(VEN8VQU9&4@/&EO<W1R96%M/@T*(VEN8VQU9&4@/&9S=')E86T^#0HC:6YC M;'5D92 \8F]O<W0O87)C:&EV92]T97AT7VEA<F-H:79E+FAP<#X-"B-I;F-L M=61E(#QB;V]S="]A<F-H:79E+W1E>'1?;V%R8VAI=F4N:'!P/@T*=7-I;F<@ M;F%M97-P86-E('-T9#L-"@T*8VQA<W,@1DE%3$0@.B!P=6)L:6,@<W1R:6YG M('L-"@EP<FEV871E.@T*"0EF<FEE;F0@8VQA<W,@8F]O<W0Z.G-E<FEA;&EZ M871I;VXZ.F%C8V5S<SL-"@D)9G)I96YD('-T9#HZ;W-T<F5A;2 F(&]P97)A M=&]R/#PH<W1D.CIO<W1R96%M("9O<RP@8V]N<W0@1DE%3$0F*3L-"@D)=&5M M<&QA=&4\8VQA<W,@07)C:&EV93X-"@D)=F]I9"!S97)I86QI>F4H07)C:&EV M92 F87(L(&-O;G-T('5N<VEG;F5D(&EN="!V97)S:6]N*2![#0H)"0EA<B F M(&)O;W-T.CIS97)I86QI>F%T:6]N.CIB87-E7V]B:F5C=#QS=')I;F<^*"IT M:&ES*3L-"@D)"6%R("8@;65M8F5R.PT*"0E]#0H)<')I=F%T93H-"@D)<W1R M:6YG(&UE;6)E<CL-"@D)1DE%3$0H*7M]#0H)<'5B;&EC.@T*"0E&245,1"AC M;VYS="!S=')I;F<F(&YA;64I.B!S=')I;F<H;F%M92E[?0T*?3L-"@T*#0IC M;&%S<R!$1$0@('L-"@EP<FEV871E.@T*"0EF<FEE;F0@8VQA<W,@8F]O<W0Z M.G-E<FEA;&EZ871I;VXZ.F%C8V5S<SL-"@D)9G)I96YD('-T9#HZ;W-T<F5A M;2 F(&]P97)A=&]R/#PH<W1D.CIO<W1R96%M("9O<RP@8V]N<W0@1$1$)B!D M9"D[#0H)"71E;7!L871E/&-L87-S($%R8VAI=F4^#0H)"79O:60@<V5R:6%L M:7IE*$%R8VAI=F4@)F%R+"!C;VYS="!U;G-I9VYE9"!I;G0@=F5R<VEO;BD@ M>PT*"0D)87(@)B!A8V-C;V1E.PT*"0D)87(@)B!F:65L9#L-"@D)"6%R("8@ M9&ES<#L-"@D)?0T*"7!U8FQI8SH-"@D)1$1$*"DZ#0H)"0EA8V-C;V1E*# I M+ T*"0D)9&ES<"@P*2P-"@D)"69I96QD*# I#0H)"0E[?0T*"0EC;&%S<R!! M0T-#3T1%("![#0H)"0EP<FEV871E.@T*"0D)"69R:65N9"!C;&%S<R!B;V]S M=#HZ<V5R:6%L:7IA=&EO;CHZ86-C97-S.PT*"0D)"69R:65N9"!S=&0Z.F]S M=')E86T@)B!O<&5R871O<CP\*'-T9#HZ;W-T<F5A;2 F;W,L(&-O;G-T($%# M0T-/1$4F*3L-"@D)"0ET96UP;&%T93QC;&%S<R!!<F-H:79E/@T*"0D)"79O M:60@<V5R:6%L:7IE*$%R8VAI=F4@)F%R+"!C;VYS="!U;G-I9VYE9"!I;G0@ M=F5R<VEO;BD@>PT*"0D)"0EA<B F(&%C8V-O9&4[#0H)"0E]#0H)"0EP=6)L M:6,Z#0H)"0ES=')I;F<@86-C8V]D93L-"@D-"@D)"4%#0T-/1$4H*7M]#0H) M"0E!0T-#3T1%*&-O;G-T('-T<FEN9R8@<RD@.B!A8V-C;V1E*',I('M]#0H) M"7T[#0H-"@D)8VQA<W,@1$E34" @>PT*"0D)<')I=F%T93H-"@D)"0EF<FEE M;F0@8VQA<W,@8F]O<W0Z.G-E<FEA;&EZ871I;VXZ.F%C8V5S<SL-"@D)"0EF M<FEE;F0@<W1D.CIO<W1R96%M("8@;W!E<F%T;W(\/"AS=&0Z.F]S=')E86T@ M)F]S+"!C;VYS="!$25-0)BD[#0H)"0D)=&5M<&QA=&4\8VQA<W,@07)C:&EV M93X-"@D)"0EV;VED('-E<FEA;&EZ92A!<F-H:79E("9A<BP@8V]N<W0@=6YS M:6=N960@:6YT('9E<G-I;VXI('L-"@D)"0D)87(@)B!D:7-P.PT*"0D)?0T* M"0D)<'5B;&EC.@T*"0D)<W1R:6YG(&1I<W [#0H)#0H)"0E$25-0*"E[?0T* M"0D)1$E34"AC;VYS="!S=')I;F<F(',I(#H@9&ES<"AS*2![?0T*"0E].PT* M"7!U8FQI8SH-"@D)04-#0T]$12H)"0EA8V-C;V1E.PT*"0E&245,1"H)"0D) M9FEE;&0[#0H)"41)4U J"0D)"61I<W [#0I].PT*#0II;G0@;6%I;BAI;G0@ M87)G8RP@8VAA<BH@87)G=EM=*2![#0H)1$1$(&1D9#L-"B-I9F1E9B!.3U]% M6$-%4%1)3TX-"@ED9&0N86-C8V]D92 ](&YE=R!$1$0Z.D%#0T-/1$4H(F$B M*3L-"B-E;F1I9@T*"61D9"YF:65L9 D](&YE=R!&245,1"@B0D%2(BD[#0H) M9&1D+F1I<W )/2!N97<@1$1$.CI$25-0*"D[#0H-"@EC;VYS="!C:&%R*B!F M:6QE(#T@(E1%4U0N='AT(CL-"@E[#0H)"7-T9#HZ;V9S=')E86T@;W,H9FEL M92D[#0H)"6)O;W-T.CIA<F-H:79E.CIT97AT7V]A<F-H:79E(&]A*&]S*3L- M"@D);V$@/#P@9&1D.PT*"0EO<RYC;&]S92@I.PT*"7T-"@T*"7L-"@D)<W1D M.CII9G-T<F5A;2!I<RAF:6QE*3L-"@D)8F]O<W0Z.F%R8VAI=F4Z.G1E>'1? G:6%R8VAI=F4@:6$H:7,I.PT*"0EI82 ^/B!D9&0[#0H)?0T*?0T* ` end
participants (1)
-
Francis ANDRE