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(a);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((a))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(a)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