Re: [ROOT] TArrayD in Classes

From: Denis NOUAIS (nouais@to.infn.it)
Date: Sun Nov 26 2000 - 18:39:54 MET


Hi Andre,

I tried your example on version 2.25.02 and i got an error message at
event 1:

filling in 20 events
  Event 0
  Event 1
Error in <TArrayD::operator[]>: index 1 out of bounds (size: 0, this:
0x4027c418)

I don't understand why, but eliminating the paranthesis in the line
     (*mass_values)[i] = 0;
  => *mass_values[i] = 0;
it works. S.b can explain the reason please?

I have a related question about TArrays:
In this example, I'd declare TArrayD instead of TArrayD* as follows
in order to simplify. Is it a bad idea? 


class ClDrawer
{
public:
  ClDrawer();
private:
  int num_events;            // number of selected events
  TArrayD mass_values;       // mass points
};

ClDrawer::ClDrawer()
{
  num_events = 20;
  mass_values.Set(num_events);
  printf("filling in %d events\n",num_events);
  int i;
  for (i=0; i<num_events; ++i)
    {
      printf("  Event %d\n",i);
      mass_values[i] = 0;
    }
  printf("done filling\n");
}


Cheers

Denis

------------------------------------------------------------------------
 Istituto Nazionale di Fisica Nucleare | Office: A 39
 Via Pietro Giuria, 1                  | Phone: (+39)011-6707377/7359
 I-10125 TORINO (Italy)                | Fax:   (+39)011-6699579
------------------------------------------------------------------------
 at Cern: office 160-R-030, phone (+41)22-7672917/72918
------------------------------------------------------------------------
    
    

On Sun, 26 Nov 2000, Andre Holzner wrote:

> Hello,
> 
> maybe this is a trivial question. I'm using root 2.26/00 of 7 November
> 2000
> on Linux.
> 
> I have a file ClDrawer.C:
> 
> #include <TArrayD.h>
> 
> class ClDrawer
> {
> public:
>   ClDrawer();
>   
>   int num_events;               // number of selected events
> 
>   TArrayD *mass_values;      // mass points
> 
>   
> };
> 
> //----------------------------------------------------------------------
> 
> ClDrawer::ClDrawer()
> {
>   num_events = 20;
> 
>   mass_values = new TArrayD(num_events);
>   mass_values->Set(num_events);
> 
>   printf("filling in %d events\n",num_events);
> 
>   int i;
>   for (i=0; i<num_events; ++i)
>     {
>       printf("  Event %d\n",i);
>       (*mass_values)[i] = 0;
>     }
> 
>   printf("done filling\n");
> }
> 
> 
> After starting root, I run
> 
> root [0]  .L ClDrawer.C
> root [1]  ClDrawer *cldrawer = new ClDrawer;
> filling in 20 events
>   Event 0
>   Event 1
> done filling
> root [2] 
> 
> i.e. the loop stops after the second event instead of filling in all 20.
> 
> If I comment out the line
>  (*mass_values)[i] = 0;
> 
> 
> I get the output up to Event 19.
> 
> 
> What am I doing wrong ?
> 
> 
> 
> thanks,
> 
> 
> Andre
> 
> 
> -- 
> ------------------+----------------------------------
> Andre Holzner     | +41 22 76 76750 
> Bureau 32 2-C13   | Building 32     
> CERN              | Office 2-C13    
> CH-1211 Geneve 23 | http://wwweth.cern.ch/~holzner/
> 



This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:38 MET