[ROOT] dinamic memory allocation within ROOT

From: Henrique de M. J. Barbosa - mestrado (hbarbosa@ifi.unicamp.br)
Date: Thu Nov 28 2002 - 22:24:36 MET


Dear Root Masters,

I have the following problem: I want to build an array of histograms and 
use this array as a parameter of a function. Well, if I fix the size of 
the array before passing it to the function:

  void main(void) {
    TH1F **histo;                        // I know this can be done
    histo = malloc(sizeof(TH1F*)*Size);  //  just by TH1F *histo[Size]

    my_fill(histo); 
  }

  my_fill(TH1F** htemp) { 
    for (int i=0; i<Size; i++)
       htemp = new TH1F();
  } 


Then it works perfectly. But my problem is that I want my subroutine to
allocate the memory because only within the subroutine I will know what
"Size" show be.

I tried to do the following:

  void main(void) {
  TH1F **histo;

  my_fill(histo); 
  }

  my_fill(TH1F** htemp) { 
    htemp = malloc(sizeof(TH1F*)*Size);
    for (int i=0; i<Size; i++)
       htemp = new TH1F();
  } 

But it doesn't work. Any tips of how to do this? I have tried to do 
some simple tests and I found out that the root behaviour is diferent from
the standard c++, maybe this is the problem, I don't know:

 root [0] double x = 3
 root [1] &x
 Error: reference type x with no initialization  FILE:/tmp/fileVv6eIH_cint LINE:1
 Error: x already declared as different type FILE:/tmp/fileVv6eIH_cint LINE:1
 *** Interpreter error recovered ***
 root [2] 

Shouldn't I've got the address of "x" in the code above?


[]'s

Henrique
****************************************
State University at Campinas - BRASIL
"Gleb Wathagin" Physics Institute
Department of Cosmic Rays and Chronology

Henrique Barbosa      The Pierre Auger
PhD Student             Observatory
****************************************



This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:51:21 MET