cleanup of objects

Eddy Offermann (eddy@rentec.com)
Fri, 18 Sep 98 11:11:16 EDT


Dear Root-ers,

Below are two macro's. The first one creates a root file with
a directory and a tree and the second one reads it many times.
This should simulate a 'real' application where several root
files contain directories in which tree's have been created with
the same name.

My problem is that I can not figure out how to clean up after,
getting the data from a file. The "delete dir;" is resulting
in a segmentation violation. Removing this statement makes
root use more and more memory.

Is there a way to avoid this memory leak ?

best regards,
Eddy

{
gROOT->Reset();

Int_t split = 0;
Int_t bsize = 32000;

TFile *hfile = new TFile("foo.root","RECREATE");

TDirectory *dir = hfile->mkdir("dir");
dir->cd();

TTree *tree = new TTree( "T", "this is a tree" );

Int_t tmp = 100;
TBranch *branch = tree->Branch("B",&tmp,"tmp/I",bsize);
tree->Fill();

hfile->Write();
hfile->Close();
delete hfile;
}

{
for (Int_t i=1; i >0; i++)
{
TFile *hfile = new TFile("foo.root","READ");
TDirectory *dir = (TDirectory *) hfile->Get("dir");
dir->cd();

TTree *tree = (TTree*) dir->Get("T");

Int_t tmp;
tree->SetBranchAddress("B",&tmp);
tree->GetEvent(0);
printf("i tmp = %d %d\n",i,tmp);

delete tree;
delete dir;
hfile->Close();
delete hfile;
}
}