I would like to call your attention, even though CINT does not complain one MUST use the " TGraph *gr[4]" - array of the TGraph pointers rather the array of TGraph objects, to avoid the memory leak and any future confusions.
To see what I am speaking about one should add two extra lines to the macro and edit the $ROOTSYS/etc/system.rootrc to make sure it contains
"Root.ObjectStat: 1"
The updated macro:
{
int i;
TGraph gr[4];
gObjectTable->Print(); // <---- NEW LINE
Float_t a[4]={450,1050,1431,1983};
Float_t b[4][4]=
{1576,3420,4854,6635,117,262,402,528,21,53,71,93,4,18,24,28};
TCanvas *c1=new TCanvas("c1","",1);
c1->Divide(2,2);
for(i=1;i<5;i++)
{
c1->cd(i);
gr[i-1]=new TGraph(4,a,b[i-1]);
gr[i-1]->Draw("AL*");
}
gObjectTable->Print(); // <---- NEW LINE
}
It should produce you 2 "Object tables". The first contains:
Object statistics
class cnt on heap size total size heap size TGraph 4 4 104 416 416The second one:
Object statistics
class cnt on heap size total size heap size TGraph 8 8 104 832 832I.e. the macro in question did create 8 TGraph objects instead of the expected 4. In fact this behavior is the bug in CINT to be fixed.
Replacing "TGraph gr[4];" with "TGraph *gr[4];" removes the trace of the memory leak. The second object table contains the correct number of the objects: Object statistics
class cnt on heap size total size heap size TGraph 4 4 104 416 416
HTH, Valeri
From: Ding Hengtong
Sent: Wed 3/15/2006 10:36 PM
To: Zhu FengRong
Cc: roottalk_at_pcroot.cern.ch
Subject: Re: [ROOT] Run Graph array macro
Hi ,
You should define "gr[4]" and "i",
that is to say you should add "TGraph gr[4];" and change
"for(i=1;i<5;i++)" into "for(Int_t i=1;i<5;i++)" in your macro, then it'll
gonna be ok.
uOn Thu, 16 Mar 2006, Zhu FengRong wrote:
> Hello,
> In the root_v4.01.02.Linux.RH7.3.gcc296 environment,I failed to run the
> macro like this:
>
> {
> Float_t a[4]={450,1050,1431,1983};
> Float_t b[4][4]=
> {1576,3420,4854,6635,117,262,402,528,21,53,71,93,4,18,24,28};
> TCanvas *c1=new TCanvas("c1","",1);
> c1->Divide(2,2);
> for(i=1;i<5;i++)
> {
> c1->cd(i);
> gr[i-1]=new TGraph(4,a,b[i-1]);
> gr[i-1]->Draw("AL*");
>
> }
> }
> Would you help me to succeed in running it?
> Thank you in advance.
>
> with best wishes,
> Fengrong Zhu
> Institute of High Energy Physics,
> C.A.S P.R.C
> zhufr_at_ihep.ac.cn
> --
> Open WebMail Project (http://openwebmail.org)
>
-- ************************************************ * Hengtong Ding * * * * Address: Institute of Particle Physics, * * Central China Normal University * * Wuhan, 430079, P. R. China * * Tel: 0086 27 6786 7946 (lab) * * 0086 27 8715 0351 (dormitory) * * Fax: 0086 27 6786 3213 * * Email: dinght_at_iopp.ccnu.edu.cn * * dinghengtong_at_hotmail.com * ************************************************Received on Thu Mar 16 2006 - 14:42:50 MET
This archive was generated by hypermail 2.2.0 : Mon Jan 01 2007 - 16:31:57 MET