Einzelnen Beitrag anzeigen

ozz

Registriert seit: 26. Jun 2005
131 Beiträge
 
#15

Re: Zugriffsverletzung bei TObjectlist.delete

  Alt 20. Mär 2007, 20:03
Hallo Leute,
herzlichen Dank für die vielen Tips. Ich bin gerade noch dabei, diese durchzutesten. Bisher nur mit wenig Erfolg. Damit gehe sehr stark davon aus, das das Problem wo anders ist. Da ich es bis noch nicht geblickt habe, poste ich einfach mal den restlichen Code. Ist echt Mist, wenn man den Wald vor lauter Bäumen nicht mehr sieht.
Besten Dank!

Delphi-Quellcode:
type TStreamlist= class (TObject)
private
   FStreamObjectList:TObjectlist;
   function Get(Index: Integer): TStringstream;
   procedure Put(Index: Integer; const Value: TStringstream);

public
   constructor Create;
   destructor Destroy;override;
   function add: integer;
   function Additem(Item:TStringstream):integer;
   property items[Index: Integer]: TStringstream read Get write Put;
   function count: integer;
   procedure delete (index:integer);
   procedure clear;
end;

implementation

constructor TStreamlist.create;
begin;
  inherited create;
  FStreamObjectList:=TObjectList.Create(true);
end;

destructor TStreamlist.destroy;
var i:Integer;
begin;
  for i:= 1 to FStreamObjectList.Count do
    begin
        FStreamObjectList.Items[i-1].free // jedes einzelne Objekt expl. freigeben
    end;
  FStreamObjectList.Clear(); // jetzt duerften nur noch nils da sein
  inherited Destroy; // und zum Schluss noch das Basisdestroy
end;

function TStreamlist.add: integer;
var TagType: TStringstream;
begin
   TagType:=TStringstream.Create('');
   Result:= FStreamObjectList.add(TagType);
end;

function TStreamlist.Additem(Item: TStringstream): Integer;
var TagType: TStringstream;
begin
    TagType:=TStringstream.Create('');
    TagType:=Item;
    Result:= FStreamObjectList.add(TagType);
end;

function TStreamlist.Get(Index: Integer):TStringstream;
begin;
    result:= TStringstream(FStreamObjectList.Items[Index]);
end;

procedure TStreamlist.Put(Index: Integer; const Value: TStringstream);
begin
    FStreamObjectList[Index]:=Value;
end;

function TStreamlist.count: integer;
begin
    result:=FStreamObjectList.count;
end;

procedure TStreamlist.Delete(index:integer);
begin
    FStreamObjectList.Delete(index);
    FStreamObjectList.Capacity := FStreamObjectList.Count; //Speicher Freigeben
end;

procedure TStreamlist.clear;
begin
 while FStreamObjectList.Count >0 do
 begin
   FStreamObjectList.Delete(0);
 end;
end;


end.
  Mit Zitat antworten Zitat