I should agree, but the fact is that when I use some simple monitors, like cpumemusage or top, I see that the memory is occuped and not that it's freed, so, when making more new and delete sequences, I end up to the swap, and I have > 250 Mb RAM space in my PC! cheers, Alberto Philippe Canal wrote: > Hi Christian, > > >>Well, as the attached (expanded) example show, it does call the DTOR >>of class C1. For what ever reason, the underlying TObject array is >>still there :-(. This seems extreemly odd. The program should >>SIGSEGV. >> > > I supposed you meant that the C1 object in C2 seems to still be there. > This is actually a behavior that __might__ happen under standard C++ rule. > > When you delete an object, its destructor is executed and its memory is > marked as free to be reused. UNLESS this memory is actually reused (by > some new memory allocation for example), the memory where the object > used to be is still in the exact same state as at the end of the destructor. > Thus it is very often the case that just after 'delete myobject;' you can > still use it without segmentation fault (however, there is no guarantee of > that). > > As you probably know, in your example the test: > > C1* c1 = c2->GetC1(); > if (!c1) > > is guaranted to always say that c1 is still there, since (in the small program > you sent) there is NO provision for c2 to learn of the demise of C1. > > Cheers, > Philippe > > > -----Original Message----- > From: owner-roottalk@pcroot.cern.ch > [mailto:owner-roottalk@pcroot.cern.ch]On Behalf Of Christian Holm > Christensen > Sent: Tuesday, November 20, 2001 2:10 PM > To: roottalk@pcroot.cern.ch > Subject: Re: [ROOT] Little hint about pointers > > > Hi all, > > I didn't get this message to roottalk, so here goes. > > Hi Alberto, > > On Tue, 20 Nov 2001 16:11:19 +0100 > Alberto Pulvirenti <alberto.pulvirenti@CT.INFN.IT> wrote > concerning "Re: [ROOT] Little hint about pointers": > >>Ok, Chhristian, I saw you're right. >>But now rises another question: >> >>if I leave the C2 destructor void, and I invoke the TObjArray::Delete(), >>what will happen to the object pointed by the C2 ? It seems that the >>TObjArray::Delete doesn't remove it... >> > > Well, as the attached (expanded) example show, it does call the DTOR > of class C1. For what ever reason, the underlying TObject array is > still there :-(. This seems extreemly odd. The program should > SIGSEGV. > > I tried this on Red Hat 6.2 (GCC 2.91) and Red Hat 7.1 ('GCC 2.96') > using ROOT 3.02/00. I also tried on Red Hat 6.2 and ROOT 3.02/04 with > the same result. > > However, on Debian GNU/Linux 2.1 (GCC 2.91) with ROOT 2.23/10, the > program does get a SIGSEGV, as I believe it should. > > Maybe I've misunderstood something in the ANSI/ISO C++ standard, that > makes this behaviour alright, but I dont think so. I believe this is a > question for the ROOT team. > > It seems that one gets a handle to the newly allocated TObjects > resulting from TObjArray::Init in TObjArray::Delete. That's my guess > anyway. > > This issues, I believe goes for all subclasses of TCollection, > including THashList. > > Yours, > > Christian Holm Christensen ------------------------------------------- > Address: Sankt Hansgade 23, 1. th. Phone: (+45) 35 35 96 91 > DK-2200 Copenhagen N Cell: (+45) 28 82 16 23 > Denmark Office: (+45) 353 25 305 > Email: cholm@nbi.dk Web: www.nbi.dk/~cholm > > > >
This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:51:09 MET