Re: [ROOT] Pointer to array of TH1F. Filling of under- and over flows ???

From: Fons Rademakers (Fons.Rademakers@cern.ch)
Date: Tue May 08 2001 - 16:11:38 MEST


Hi Martin,

  it turned out to be a bug in the TH1 assignment/copy operator.
Fix is now in CVS and your test works.

Cheers, Fons.



Rene Brun wrote:
> 
> Hi Martin,
> 
> You are deleting your histogram after pMult_[i] = *pDum;
> You then have an illegal access when you attempt to Fill it.
> 
> Rene Brun
> 
> Martin Karlsson wrote:
> >
> > Dear Rooters,
> >
> > I'm having problems with filling of TH1F.
> >
> > I'm working on an application in which a bunch of histograms are declared as
> > 'pointer to array'.
> > Before, I used v. 2.23/12 and it worked without any problems; now, however I
> > have upgraded to version
> > 3.00/06 and then when I run the program it crashes (seg. violation). It turns
> > out that the crash occurs when a Fill() call is done and it is an over- or
> > under flow that is to be filled.
> >
> > The following test program illustrates the problem:
> > ////////////////////////////////
> > int main()
> > {
> >   TROOT litta("try","try ");
> >
> >   TH1F  simp;
> >   TH1F * pMult_=NULL;
> >
> >   char hname[100], htitle[100];
> >
> >   pMult_ = new TH1F[2];
> >   for( Int_t i = 0; i < 2; i++)
> >     {
> >       sprintf( hname, "pMult_%d", i);
> >       sprintf( htitle, "pointer to Mult %d", i);
> >       TH1F * pDum = new TH1F(hname, htitle, 11, -0.5, 10.5);
> >       pMult_[i] = *pDum;
> >       delete pDum;
> >     }
> >
> >   simp = TH1F("simp","simp", 11, -0.5, 10.5);
> >
> >   for(Int_t i = 0; i < 13; i++)
> >     {
> >       pMult_[0].Fill(i);
> >       pMult_[1].Fill(i);
> >     }
> >
> >   delete [] pMult_;
> >
> >   return 0;
> > }
> > /////////////////////////////
> >
> > If I compile this (with the --new option sent to root-config (as I'm using a
> > TMapFile in my application)) and then run it, the Fill() call with under- or
> > overflow will crash (seg violation) the program.
> >
> > I can get the small test program to work if I do one of the following:
> > *compile WITHOUT (sic) -- new flag
> > *just run as a macro
> > *use v. 2.23/12
> > *remove the non-pointer-TH1F simp
> > *change the number of bins to say <11 or > 12 !!!
> >
> > So, I'm a bit confused about this behavior... of course I could re-declare all
> > my histograms but that's not fun and I  do like to know what I'm doing wrong.
> > So if anyone has a clue I would very much appreciate being enlightened.
> >
> > Best Regards,
> > Martin
> >
> > P.S. I use RH 6.1 on a SMP i686 (two processors) and with egcs-1.1.2
> >
> >
> >
> > --
> > Martin Karlsson
> > Department of Nuclear Physics, University of Lund
> > Box 118, SE-221 00 Lund, Sweden
> > Phone: +46 (0)46 222 96 77  or +46 (0)736 87 84 15
> > Fax: +46 (0)46 222 76 29
> >
> >

-- 
Org:    CERN, European Laboratory for Particle Physics.
Mail:   1211 Geneve 23, Switzerland
E-Mail: Fons.Rademakers@cern.ch              Phone: +41 22 7679248
WWW:    http://root.cern.ch/~rdm/            Fax:   +41 22 7677910



This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:50:44 MET