Hello Rooters
I have some trouble managing memory with TCanvas objects.
I have an array of TCanvas that I dynamically allocate (the size is not
known at run time). So I do;
TCanvas** c1 = NULL;
.......................
// the size of the array is now known, it is "nHistos"
c1 = TCanvas*[nHistos];
for (int i = 0; i < nHistos; i++) {
char szPadName[10];
sprintf(szPadName, "c%d", i + 1);
c1[i] = new TCanvas(szPadName, szPadName, 10 + 20 *
i, 10 + 20 * i, 750 + 20 * i, 940 + 20 * i);
}
This works fine, I can use the canvas without trouble. But when I try to
delete them and free the memory:
if (c1) {
for (int i = 0; i < nHistos; i++) {
if (c1[i]) {
delete c1[i];
c1[i] = NULL;
}
}
delete[] c1;
}
This works also fine, except after I have deleted a canvas using the mouse
on the x button. Then everything crashes. Obviously ROOT makes some
housekeeping I don't know and all some of my pointers are now dangling.
How can I solve this problem? I tried also to use the gROOT pointer and
the GetListOfCanvases() as in:
if (gROOT->GetListOfCanvases()->FindObject(c1[i]->GetName())) {
delete c1[i];
}
but this doesn't help since the problem seems to be with the pointer c[i]
itself.
Thanks a lot.
Matthieu Guillo
University of South Carolina
Thomas Jefferson National Laboratory
Office 71 trailer 16
Phone: 757-269-5551
This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:50:52 MET