Hi folks,

please check out this code (unit). Certainly there is something very strange 
going on in handling memory in freepascal. I'm using Free Pascal Compiler 
version 1.9.4 [2004/05/30] for i386.

Thanks in advance for replying.

Andreas

{ snip%<************************************************************************
   Pascal unit: testObject
   Author: Andreas Gros <andreas.gros at biozentrum dot uni-wuerzburg dot de>
}

unit testObject;

interface
uses
  SysUtils, Types, Classes, Variants;
        
procedure test();

type    TTestObj = class(TObject)
                                public
                                Findex : Integer;
                                constructor Create(_index : Integer); 
                        end;

implementation

constructor TTestObj.Create(_index : Integer); 
        begin
        Findex := _index;
        end;
        
        
procedure test();
        var list : TList;
                        i : Integer;
                        t : TTestObj;
        begin
        list := TList.Create();
        //create 6 TTestObj-ects with ascending indices
        for i := 0 to 5 do
                begin
                list.add(TTestObj.Create(i));
                end;
        
        t := TTestObj(list.first());
        //writes 0 to stdout
        writeln(t.Findex);
        FreeAndNil(t);
        list.pack();
        t := TTestObj(list.first());
        {the next line should write 1 to stdout, because the first object was freed,   
         
         but the result is 0!!!
         it is still the old index, the object is still existing and FreeAndNil as 
        well as TList.pack have no effect}
        writeln(t.Findex);
        
        { but now the crux: you can't say free again:
           an access violation error message turns up}
        FreeAndNil(t);
        
        end;

end.

{ snip%<************************************************************************}
testobj.pp:
{ snip%<************************************************************************}
program main;
uses testObject in 'testObject.pas';

begin
 test();    

end.
{ snip%<************************************************************************}

-- 
Andreas Gros
Forschungsstation Fabrikschleichach
Uni Wuerzburg
Glashuettenstr. 5
96181 Rauhenebrach

_______________________________________________
fpc-pascal maillist  -  [EMAIL PROTECTED]
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to