Hi Nicolas, When you specify the address of a variable or object to a Tree, this address must be valid during the life time of the Tree in memory (normal C++ scoping rules). In your case, simply declare the variable(s) static in your function where you define the branches. Rene Brun Nicolas Produit wrote: > > Hi, > > I fall in a trap using TTree. I think it can be useful for other to know > about the trap and perhaps it could be documented (or discussed or changed...) > (My root: 3.04/02 on linux) > > I was declaring a TTree in routine "a". Routine "a" was calling routine "b" > where all the branches of the tree where declared and filled. > Then routine "a" was making a tree->Print(). > When declaring and filling the branch I had obviously to use > variables known to the branch to hold the data before calling the Fill() > method. > Now the trap: I was using for that purpose a local variables of "b"! > This resulted in random crash in CINT and constant crash in compiled code. > Until I realised that perhaps Print() was needed the variables that where > destroyed going out of routine "b"! > Sure enough, when declaring those variables in "a" and passing them to "b" the problem disappear. > > 1- Can you confirm that the address passed in the second parameter of the Branch constructor > have to exist as long as the tree exist? > 2- Is that not a sort of breach of data encapsulation? I mean, I declare a variable, > use it to fill the tree and then I have no more need of it in my user program so I destroy it. > Why do I have to care that the machinery has a need of it? Draw, Scan, and Print can, if they need > a variable to hold temporary results, redefine the Branch address and use their own local variables. > (and they reestablish the old address when done to be nice with other) > > Thanks > > -- > Nicolas Produit > INTEGRAL Science Data Center Phone: +41 22 950 91 40 > 16, Chemin d'Ecogia Fax: +41 22 950 91 33 > CH-1290 Versoix www: http://isdc.unige.ch/
This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:15 MET