Hi Robert,
If you have a TPad *mypad object in a canvas, you cannot do:
if (mypad::IsRetained()) after having deleted the canvas. At this point, mypad
will point to a deleted object.
You can test if a pad (eg with name "mypad") is inside a canvas with
if (canvas->GetPrimitive("mypad")) // then the pad exists
or
if (canvas->GetListOfPrimitives()->FindObject("mypad"))
You can test if a canvas my name "mycanvas" exists with
if (gROOT->GetListOfCanvases()->FindObject("mycanvas")) //canvas exists.
Rene Brun
Robert Michaels wrote:
>
> I have two systems, both running root 3.01-06 (compiled on each system).
>
> System I: RedHat 6.2 kernel 2.2.19-6.2.7
> System II: RedHat 7.1 kernel 2.4.8
>
> I have a complicated GUI. I suppose I should show a simple example of
> my problem, but let's see if I can get a hint from this description.
>
> My GUI makes creates a "new TCanvas" in which it makes other new TPad's
> and then uses TH1F::DrawCopy to draw histograms so that the TPad's own
> the THistPainter and whatever else is created by DrawCopy.
>
> At first I observed memory leaks, but on "System I" this was solved
> by deleting the TPad's and TCanvas's I "new'd" before trying to "new"
> again. Also by usinig TH1F::DrawCopy. The method gObjectTable::Print()
> and "top" verified a stable total heap size.
>
> Then I had a problem when deletion occurred by pressing "X" in the
> top right side of the window to delete the TCanvas "by hand" (or if one
> used the TCanvas's File->Delete in top left of canvas to delete).
> I tried to use the TPad::IsRetained() method to see if a TPad had
> been deleted. If it IsRetained was kFALSE, I didn't try to delete again,
> and the code was stable on System I. Perhaps this was an accident
> since the IsRetained method belonged to a TPad that "X" presumably
> deleted. Nevertheless it seemed to work. However, on System II, I get
> segmentation faults, and IsRetained always returns kTRUE.
>
> My question is : How can I tell if a TPad object was deleted ?
> (This is probably very basic C++ ...)
>
> Thanks !
> ------------------------------------------------------
> Robert W. Michaels
> www.jlab.org/~rom
> phone (757) 269 7410 pager (757) 881 7897
> Thomas Jefferson National Accelerator Facility
> 12000 Jefferson Ave, Newport News, VA 23606 USA
This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:51:00 MET