a Free procedure call doesn't free (and nil) an object

fsurfer
fsurfer used Ask the Experts™
on
hi everyone,

i have the following problem :
i've created a TTimer descendent the following way :

interface

  TMyTimer = Class(TTimer)
                    ... various variables and TList Objects...
              public
                    constructor Create(aowner : TComponent);override;
                    destructor destroy; override;
              end;

var MyTimer : TMyTimer;

constructor TPopUpCampagne.Create(AOwner : Tcomponent);
Begin
     inherited Create(AOwner);
     ... several initializations including OnTimer affectation ...
End;

destructor TPopUpCampagne.destroy;
begin
     ... stuff to free memory...

     inherited destroy;
End;

then, further in the source code, i do the following (i want to destroy MyTimer to re-create it - instead of updating its data) :

if Assigned(Mytimer) then
   MyTimer.free;

...

MyTimer:=TMyTimer.Create(Nil);

the problem is that after the free call, the variable MyTimer isn't Nil - as expected ! but is still pointing to an existing object (and then my program throws an exception on another operation).

i've run the debugger and all the free calls in the object hierarchy are done.

Does anyone have an idea about what's happening ? and does anyone have a workaround ?
i could recreate the variable with the MyTimer:=TMyTimer.Create(Nil); but then i would have a memory leak...


thanks in advance,

Guillaume

PS : i put 150 points, cause it's important and i need a quick answer...
Comment
Watch Question

Do more with

Expert Office
EXPERT OFFICE® is a registered trademark of EXPERTS EXCHANGE®
Top Expert 2004
Commented:
instead of

if Assigned(Mytimer) then
   MyTimer.free;

use

if Assigned(Mytimer) then
   FreeAndNil(MyTimer);

meikl ;-)
Top Expert 2004

Commented:
just for eplanation

>the problem is that after the free call, the variable MyTimer isn't
>Nil - as expected !

the referenceVariable is never set to nil after calling the free-method,
thats a normal bahaviour, you as developer have to care about this

meikl ;-)
Top Expert 2004

Commented:
btw. your timer is freed

Author

Commented:
Thanks for the answer !

it works perfectly !

i've always believe that free was doing a FreeAnd Nil....hmmmm there're always things to learn :)

Guillaume
Top Expert 2004

Commented:
glad to helped you ;-)

Do more with

Expert Office
Submit tech questions to Ask the Experts™ at any time to receive solutions, advice, and new ideas from leading industry professionals.

Start 7-Day Free Trial