Hi Pierre-Luc, When you close a file, all the objects 'Appended' to this file are deleted. In particular, histogram and trees are automatically appended to the current directory. Hence, 'myfile->Close();' as the side-effect of deleting ctbuf. You might want to (re)read the chapter on object ownership in the ROOT Users Guide. Note that your code is missing (at least in this copy/pasted version) and essential myfile->Write(); without which the tree is not fully written/flushed to the file. Cheers, Philippe -----Original Message----- From: owner-roottalk@pcroot.cern.ch [mailto:owner-roottalk@pcroot.cern.ch]On Behalf Of Pierre-Luc Drouin Sent: Wednesday, July 02, 2003 11:03 AM To: roottalk@pcroot.cern.ch Subject: [ROOT] Segmentation fault. Cause: Closing a TFile Hello, I've to open a TFile, get a TTree instance from it, and copy this TTree with some selections to a new TTree object and then to close the TFile. My code is the following: TTree *tbuf, *ctbuf; TDirectory* fluxdir= \\A pointer to a TDirectory in a TFile TDirectory *ctdir; TFile *myfile=new TFile("myfile.root","READ"); tbuf=dynamic_cast<TTree*>(myfile->Get("mytree")); ctdir=fluxdir->mkdir("Event Info"); ctdir->cd(); ctbuf=tbuf->CopyTree(allcuts); myfile->Close(); gROOT->Delete(cardbuf[i][filenameindex]); I get a segmentation fault when I try to ctbuf->Draw() further in the code. Since gDirectory==ctdir in the code, I don't understand how ctbuf could depend on myfile. When I comment the last two lines in the code, everything works fine Thank you Pierre-Luc Drouin
This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:13 MET