[ROOT] Segfault while iterating over file

From: Jeroen Hegeman (jhegeman@nikhef.nl)
Date: Thu Sep 05 2002 - 16:38:40 MEST


Hi everyone,

While trying to loop over all objects in a .root file (in order to dump 
all 
histograms at once), I seem to have an unexspected problem. The below code 
results in a 'segmentation fault' every second or third run.
The problem has nothing to do with the assignment to currentObject because 
the commented line in the code does the same (apart from leaking...). 
Replacing GetObject() with GetKeyName() gives no problems, the iterator is 
fine and when it does run, the values that come out are right.
I have looked through roottalks and tried debugging but I must be missing 
something, anybody have a clue?

Thanks in advance,
Jeroen

{
// Load the library we need for TFileIter
gSystem->Load("libStar");

TObject* currentObject = NULL;
TFile* inFile = new TFile("hsimple.root","READ");
TFileIter* iter = new TFileIter(inFile);

Int_t nrOfObjects = iter->TotalKeys();

// Loop over all objects in inFile.
for (iter->Reset(); (int)(*iter) < nrOfObjects; iter->SkipObjects()) {
  cout << "\ngoing to extract object #" << (int)(*iter) << "\n";

  //  cout << iter->GetObject() << "\n";
  if (currentObject = (iter->GetObject())) {
    cout << "current object extracted\n";
  };

  if (currentObject) {
    currentObject->Delete();
  };
}; // (End of object-loop.)

if (inFile->IsOpen()) {
  inFile->Close();
};
delete inFile;
};



This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:51:07 MET