Re: problem writing TArrayF

From: Rene Brun (Rene.Brun@cern.ch)
Date: Mon Oct 18 1999 - 22:10:25 MEST


Hi Beatriz, Manuel,
This problem has been fixed in 2.23/04. See release notes.

Rene Brun

On Mon, 18 Oct 1999, Beatriz Fuentes Arenaz wrote:

> 
> Hello root gurus,
> 
> We have found a problem when writing more than one TArrayF pointer into a
> buffer. For example, we can write a Test (see code below) object into a
> file, but when reading it back we get the following error message:
> 
> 	 Error in <TBuffer::ReadClass>: illegal class tag=55 (0<tag<=3),
> I/O buffer corrupted
> 
>  *** Break *** segmentation violation
> 
> 
> The error does not appear if one of the TArrayF pointers is not
> persistent, or if we use the Streamer function in the code below. This
> Streamer function only differs from the one automatically generated by
> rootcint in the use of the TArrayF::Streamer instead of the >>
> and << operators. 
> 
> This problem did not appear in ROOT version 2.21/08. Have you got insight
> what the problem is? 
> 
> 
> Thanks in advance,
> 
> 
> 			Manuel Sanchez Garcia
> 			Beatriz Fuentes Arenaz
> 
> 
> 
> # ifndef TEST_H
> # define TEST_H
> 
> # include "TObject.h"
> # include "TArrayF.h"
> 
> class Test : public TObject{
> 
> private:
> 
>   Short_t nSectors, nModules;        // number of sectors and modules in
> setup
>     TArrayF *resolution;             // plane resolution in cm
>     TArrayF *efficiency;             // efficiency of chamber (in %)
> public:
>     Test(void);
>     ~Test(void);
> 
> ClassDef(Test,1)
> };
> 
> 
> # endif
> 
> 
> 
> # include "test.h"
> # include <iostream.h>
> 
> ClassImp(Test)
> 
> 
>   Test :: Test(void){
> 
>   nSectors = 6;
>   nModules = 4;
> 
>   efficiency = new TArrayF(nSectors*nModules);
>   resolution = new TArrayF(nSectors*nModules);
> 
> }
> 
> 
> Test :: ~Test(void){
> 
>   if (resolution) delete resolution;
>   if (efficiency) delete efficiency;
> }
> 
> 
> #if 0
> 
> void Test::Streamer(TBuffer &R__b)
> {
>    // Stream an object of class HMdcsDigiPar.
> 
>    if (R__b.IsReading()) {
>       Version_t R__v = R__b.ReadVersion(); if (R__v) { }
>       TObject::Streamer(R__b);
>       R__b >> nSectors;
>       R__b >> nModules;
>       resolution->Streamer(R__b);
>       efficiency->Streamer(R__b);
>    } else {
>       R__b.WriteVersion(Test::IsA());
>       TObject::Streamer(R__b);
>       R__b << nSectors;
>       R__b << nModules;
>       resolution->Streamer(R__b);
>       efficiency->Streamer(R__b);
>    }
> }
> #endif
> 
> 
> 
> 
> 
> 
> ---
> 	Manuel Sanchez Garcia
> 	Beatriz Fuentes Arenaz
> Org:    Departamento de Fisica de Particulas, despacho 106
> 	Facultad de Fisica
>         Universidad de Santiago de Compostela
> Mail:   E - 15706 - Santiago de Compostela     Tlf:   +34-981-563100 ext:13981 
> E-Mail: manuel@fpddv1.usc.es                   Fax:   +34-981-521091
>         beatriz@fpddux.usc.es
> 



This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:43:41 MET