On 5/6/2010 3:12 PM, José Mejuto wrote:
Entering the doom again... Next question could be why:
p1: TObject;
p2: TObject;
p1:=TObject.Create();
p2:=p1;
P1.free;
p1:=nil;
Why I get an AV if accesing p2 ? Because the object has been freed...
So why is not p2 = nil as p1 ?
The short answer is because you have not set p2 to nil as you did to p1.
Pointer operations (and the disguised ones that are references to class
instances and dynamic data structures) are NOT managed for you. You
still have to be careful in handling them. That is why the FreeAndNil
procedure was created. To help you manage object instance references.
Consider this: The runtime system does not keep track of how many
variables you set pointing to a given location. To do so would be VERY
inefficient. Therefore, it cannot go out and find all those variables
and set them for you. As the programmer you have to do this yourself.
That's part of what programming is all about.
_______________________________________________
fpc-pascal maillist - fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal