Dear Rene,
thank you, and sorry for buggy example. But now, when I forbid
writing of fPermIndx,
Int_t* fPermIndx; //! Permutations index array for LU decomposition
and increased the counter in the ClassDef,
when I am reading our old data (written with previous version of the
class),
I get an error message even with root.3.02:
Error in <TBuffer::CheckByteCount>: object of class NaCovMatrix read too many bytes
Warning in <TBuffer::CheckByteCount>: NaCovMatrix::Streamer() not in sync with data on file, fix Streamer()
Are there limitations on the automatic schema evaluation with custom
streamers? As I understand, with new version of the class, the existing
record for fPermIndx (written by previous version) should be simply
neglected.
Best regards,
Ruben
On Tue, 21 Jan 2003, Rene Brun wrote:
> Hi Ruben,
>
> It took me sometime to investigate your problem.
> You have far too many compilation errors when running with gcc3.2.
>
> Anyhow, I found your problem. In your class, you have a data member;
> Int_t* fPermIndx; //[fSize] Permutations index array for LU decomposition
>
> in your constructor, you set fSize, but forget to create the array fPermIndx.
> This array should have the length fSize.
>
> Rene Brun
>
> Ruben Shahoyan wrote:
> >
> > Hello,
> > I have a class with custom streamer, which works fine for root 3.02 and
> > lower but produces an error during the reading with all higher root
> > versions:
> >
> > Error in <TBuffer::CheckByteCount>: object of class NaCovMatrix read too
> > many bytes: 107 instead of 95
> > Warning in <TBuffer::CheckByteCount>: NaCovMatrix::Streamer() not in sync
> > with data on file, fix Streamer()
> >
> > The relevant parts of the class definition are
> >
> > typedef Float_t MElem_t; // Type of matrix elements
> >
> > class NaCovMatrix : public TObject {
> > protected:
> > Int_t fSize; // Size of the matrix
> > Int_t fSize2; // Number of elements (size^2)
> > MElem_t* fElements; //[fSize2] Elements
> > MElem_t** fIndex; //! Pointers on rows
> >
> > };
> >
> > The streamer looks like:
> >
> > void NaCovMatrix::Streamer(TBuffer &R__b)
> > {
> > // Stream an object of class NaMatrix.
> > if (R__b.IsReading()) {
> > NaCovMatrix::Class()->ReadBuffer(R__b, this);
> > fIndex = new MElem_t*[fSize];
> > MElem_t* pnt=&fElements[0];
> > for (Int_t i=0;i<fSize;i++,pnt+=fSize) fIndex[i] = pnt;
> > } else {
> > NaCovMatrix::Class()->WriteBuffer(R__b, this);
> > }
> > }
> >
> > Does anybody have idea what could be the reason?
> > I attach the small script testM compiling and running an example
> > producing an error with root 3.03, 3,04 and 3.05 but working with 3.02
> >
> > Best regards,
> > Ruben
> >
> > --------------------------------------------------------------------------------
> > Name: testMat.tar.gz
> > testMat.tar.gz Type: Unix Tape Archive (application/x-tar)
> > Encoding: BASE64
>
This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:08 MET