[ROOT] Problem with memory leak

From: Dr. D. Sideris (d.sideris@ic.ac.uk)
Date: Thu Nov 09 2000 - 13:14:37 MET


Hi, I'm trying to use root for a simple application but it seems the moment I solve one problem a new one occures... That's not by any means a problem of ROOT, it could be just me. Now after I solved several problems by magic... (for some reason VC++ didn't like 'cout' inside my class) I've run into a new problem. I create a tree and a branch, I fill it and tree->Print() gives a reasonable output, but when I do f->Write(); (f is my TFile) I get:

<CustomReAlloc2>: passed oldsize 1032, should be 17694850
Fatal in <CustomReAlloc2>: unreasonable size (17694850)
aborting
Warning in <TWinNTSystem::StackTrace>: this method must be overridden!
Press any key to continue


I paste the function below, in case someone has a usefull sugestion. Thanks



Dimitris


Int_t Global::ReadAscii()
 {
 int pixel=0,totpixels_f=0,p=0,cutim=0,rtim=0;
 float v[300]={0},v0=0,cur[4000]={0};
 int nlines = 0;


 int nic[3000]={0},totic=0;
 float avi=0.,invavi=0,ic[4000]={0},tic[4000]={0};
 
 int split = 0;
 int bsize =256000;

//    ifstream fout,fcur;

 ifstream *fout = new ifstream;
 ifstream *fcur = new ifstream;

 tim=0;

// Create a ROOT Tree

   A *a = new A; 
   TFile *f = new TFile("A.root","recreate");
   tree = new TTree("T","An example of ROOT tree");
   tree->Branch("aa","A",&a,bsize,split);


 Float_t rtim_period=Float_t(0.7);

 int mintim=400000;
 int maxtim=0;
 Float_t ti=Float_t(10.003);



// FILE *fout=fopen("test.out","r");
// FILE *fcur=fopen("test2.cur","r");
    fout->open("test.out", ios::in);
    fcur->open("test2.cur", ios::in);
  
   int i=0;
   int ncols=0;

   while (1) {
//  ncols=fscanf(fcur,"%i    %f",&nic[i],&ic[i]);
        *fcur >> nic[i] >> ic[i];   
        if (!fcur->good()) break;
  ic[i]*=1000;
        avi+=ic[i];
        if (ic[i]==0) ic[i]=149.5;
        invavi+=1/ic[i++];
   }

   
 totic=i;
 avi=avi/float(totic);
 invavi=invavi/float(totic);



 if (avi==0.) {
  *logf << "WARNING: No Current Info Available\n" <<endl;

 } else {
   *logf << "Average Current= " << avi << '\n' <<endl;
  tic[0]=ti;
  ic[0]=avi;
  for(i=1;i<=totic;i++){
   if(ic[i]==0.) ic[i]=avi;
   tic[i]=(tic[i-1]+(1/ic[i]+1/ic[i-1])/2*avi*ti);
  }
 }
  
 
 
 int pi=1;
 int tim2=0;

 pixel=0;
 a->rv[0]=0;
 v[0]=0;

 while (tim<100) {

//  ncols=fscanf(fout,"%i %f %i",&pixel,&v[pixel+1],&totpixels_f);

  *fout >> pixel >> v[pixel+1] >> totpixels_f ;
  if (!fout->good()) break;

//  if (ncols<0) break;


  a->rv[pixel+1]=v[pixel+1];
 
     cutim=int(tim/ti+1);
  
  if (cutim>totic) {
         cur[pixel+1]=ic[totic];
        } else {
         cur[pixel+1]=ic[cutim];
  }
         
        rtim=int((float(tim)-float(cutim)*ti)/ti*(tic[cutim+1]-tic[cutim])+tic[cutim]);
       
         
        a->time=tim;
//  a->rtime=rtim;
  if (pi==256) {
   if (pixel!=255) {
          *logf << "Mismach in reading file. STOP\n" <<endl;
          break;
   }
  
          
         
   if (tim<mintim || tim>maxtim) {
    tree->Fill();
          tim2++;
        if (int(tim2/1000.)==tim2/1000.) *logf << ".. " << tim2 <<'\n' <<endl;
   }
   tim++;
         pi=0;

   if (int(tim/1000.)==tim/1000.)  *logf << ".. " << tim2 << '\n' <<endl;
        }
  pi++;

  nlines++;
   } 

  *logf << " found " << nlines << " points\n" <<endl;
 
  tree->Print();
 f->Write(); 

    *logf << "here1\n" << endl;

  *logf << "here2\n" << endl;
  fout->close();
  *logf << "here3\n" << endl;
  fcur->close();

///   *logf << "here4\n" << endl;
 f->Close();
  *logf << "here5\n" << endl;
 delete tree;
 delete a;
 delete f; 
// delete fout;
// delete fcur; 
*logf << "END\n" << endl; 
// logf->close();
   return 0;
 }



This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:37 MET