Hi, I have a question. I have a class class A : public TObject { TFile *f; A() { f=new TFile("myfile.root"); } ~A() { cout << f->GetName() << endl; delete f; } }; and a macro void macro() { A a; [some code] } Let this macro run in some conditions (which I cannot name) the destructor of A crashed. After some debugging I found out, that the pointer points to an invalid location. The only idea I have is, that the TFile gets deleted via gROOT->GetListOfFiles() (because after constructor of TFile the kCanDeleteBit is set). But what could be the reason, that the ListOfFiles() deletes all files? Note that I start the macro with: root -q macro.C More strange if I change the timing of the code (just by adding additional output somewhere) the problem gets even worse or better. Is it possible that you have two concurrent threads when a root exits because the macro has finished? One which deletes A and one which already deleted the TFile (because it was faster)? Best regards, Thomas.
This archive was generated by hypermail 2b29 : Sun Jan 02 2005 - 05:50:09 MET