Hello, In the exemple program bellow, I have reproduced a strange problem... ----------------------------------------------------------------------- With the code #include <iostream> #include <TROOT.h> #include <TClonesArray.h> class A :public TObject { protected: Int_t fX; TClonesArray *pb; // here is the problem source... >>>>---------------------------------------<<<<< public: A():TObject(){cout<<"Default A constructor"<<endl; fX=0;} A(Int_t x):TObject(){cout<<"Creating A with x="<<x<<endl;fX=x;} ~A(){cout<<"Deleting A with x="<<fX<<endl;} Int_t X() const {return fX;} Int_t X(Int_t x){return fX=x;} ClassDef(A,1) }; the copy of the dict.cxx file generated by rootcint is void A::Streamer(TBuffer &R__b) { // Stream an object of class A. UInt_t R__s, R__c; if (R__b.IsReading()) { Version_t R__v = R__b.ReadVersion(&R__s, &R__c); if (R__v) { } TObject::Streamer(R__b); R__b >> fX; pb->Streamer(R__b); >>>>---- My Problem .... ----------<<<<<<<<< R__b.CheckByteCount(R__s, R__c, A::IsA()); } else { R__c = R__b.WriteVersion(A::IsA(), kTRUE); TObject::Streamer(R__b); R__b << fX; pb->Streamer(R__b); R__b.SetByteCount(R__c, kTRUE); } } ------------------------------------------------------------------------ As you can see, this streamer expect <pb> to be well instanciated. Since 1) the default constructor is supposed to not allocate memory, and 2) this default constructor is used on file reading then, as you can imagine, I'm facing a *** Break *** segmentation violation error. I also add a -> on comments but nothing is changed (and I think that this should be used exactly for the opposite goal....) This is really strange, because, if I replace TClonesArray* by TTree* (for instance) the code generated use a "normal" R__b>>pb Then, since it's a special case, may be I miss a special rule, but, if so, please tell me which one Thanks in advance DAVID -- David GUEZ davguez@mail.dotcom.fr WEB : www.fairesuivre.com/~davguez ICQ : 6229724
This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:50:48 MET