Hi David, Your statement fFile->Close(); will automatically delete all objects in memory related to the file, including the Tree. So when calling delete fTree; you delete an already deleted object. Note that you can alos delete the statement fFile->Close(); The statement "delete fFile" will automatically close the file if it is not yet closed. Also replace: THenaEvent *fRaw = new THenaEvent(); by THenaEvent *fRaw = 0; The TTree::GetEntry statement will create the object. Rene Brun On Wed, 2 Oct 2002, [iso-8859-1] Lindelöf David wrote: > Hello, > > I have observed a very peculiar behaviour which I hope someone can help > explain. I have a macro that runs like this: > > { > TFile *fFile = new TFile("somefilename"); > TTree *fTree = (TTree*) fFile->Get("EventsTree"); > TBranch *b_Events=fTree->GetBranch("Event"); > THenaEvent *fRaw = new THenaEvent(); //THenaEvent is a custom > class written for holding data > b_Events->SetAddress(&fRaw); > fFile->Close(); > delete fFile; > delete fRaw; > delete b_Events; > } > > The macro runs fine but: > > 1) How do I get rid of the TTree?? Running > delete fTree > yields only a segmentation violation. > > 2) When I afterwards type > fFile = new TFile("samefilename") > I get a segmentation violation, but running it a *second* time works fine. > > I am experimenting with all this in order to be able to run a set of > analysis macros on a huge amount of files. So far it always hangs when it > reaches the second file. > > Any help would be greatly appreciated. > > David Lindelof > EP-Division > CERN > 1211 Geneva 23 > Switzerland >
This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:51:12 MET