I am having a little problem with the following macro: { gROOT->Reset(); gSystem->Load("libMyClasses.so"); TH1F dull("dull","dullhisto",100, -5, 5); for(Int_t i=0; i<1000; i++){ dull.Fill( (gRandom->Gaus(1.5, .5)) ); } cout<<"dull.GetMean(): "<<dull.GetMean()<<endl; TFile f("test.root", "RECREATE"); MyClass mc; mc.SetType("tester"); mc.SetTube(2); mc.SetPixel(5); mc.SetHist(dull); cout<<"mc.GetMean(): "<<mc.GetMean()<<endl; f.ls(); mc.Write(); f.ls(); f.Close(); } The macro outputs: root [0] .x test.C dull.GetMean(): 1.47894 mc.GetMean(): 1.47894 TFile** test.root TFile* test.root OBJ: TH1F dull dullhisto : 0 TFile** test.root TFile* test.root OBJ: TH1F dull dullhisto : 0 KEY: MyClass MyClass;1 root [1] f.Close(); Fatal in <operator delete>: storage area overwritten aborting *ROOT crashes out at this point* This result suprised me in two ways: (1) Why is the TH1F "dull" added to the test.root directory? I would not have expected this behaviour, considering that dull was created prior to opening the TFile. (2) I suspect the crash is due to (1). When the file closes, it writes out dull, which invalidates it. {See for reference the User's Guide p168. They use heap objects and pointers there though.} Also: If I open a browser and access the TFile, A MyClass object is indeed in there. This is what I expected. If I double click the MyClass object, it pulls up the Object Inspector (ok). It also then shows a TH1F within the right browser window (ok, wasn't sure what would happen). Further double clicks on the MyClass object produce more histograms though! Why is this. It is perhaps not disaster, but rather confusing to look at! They seem to be clones of each other (rather than references to one object), since if I smooth one of them, the others do not reflect the change when drawn. How can I understand/get rid of this behaviour? Some time ago a collegue told me that she always wrote compiled code because macros often did unexpected things. I tend to find myself in the same boat. As an observation, I notice that tutorials and the users manual examples tend to feature much more dynamic allocation than I would normally write. I don't really appreciate why this is, perhaps it's only stylistic, but maybe I need to change my coding practices when writing macros? Comments greatly appreciated! Mike Kordosky -- Graduate Research Assistant // High Energy Physics Lab kordosky@hep.utexas.edu // University of Texas at Austin ph: (512) 471-8426 (RLM Lab, Office) (512) 475-8673 (ENS Lab)
This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:50:40 MET