Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Array verkleinern (https://www.delphipraxis.net/92805-array-verkleinern.html)

Neutral General 26. Mai 2007 12:38

Re: Array verkleinern
 
Hi,

Dein Argument gegen die TObjectList ist nicht besonders gut ;)
Du kannst casten und man kann sich ne Klasse von TObjectList ableiten die auf deine Klasse "spezialisiert" ist ;)

Gruß
Neutral General

Andreas L. 26. Mai 2007 12:50

Re: Array verkleinern
 
Habs jetzt hinbekommen. :-)

Heute anscheinend bei meinen letzten versuch nur vergessen ein bla := Tobjectlist.create; im create meiner klasse aufzurufen :wall:

Und jetzt frisst er auf einmal auch meine Klasse bei objlst.add();

Danke an alle

Luckie 26. Mai 2007 13:00

Re: Array verkleinern
 
Zitat:

Zitat von Andreas L.
Wenn ich meinarray[0] was zuweise bekomme ich ne AV.

Dann machst du was falsch:
Delphi-Quellcode:
var
  DynArray: array of Integer;

procedure TForm1.Button1Click(Sender: TObject);
begin
  SetLength(DynArray, Length(DynArray) + 1);
  DynArray[High(DynArray)] := round(random * 100);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  ShowMessage(IntToStr(DynArray[High(DynArray)]));
end;
Aber eine Klasse zu vewenden wäre bestimmt günstiger: http://www.michael-puff.de/Developer...er_Klassen.php

himitsu 26. Mai 2007 16:59

Re: Array verkleinern
 
Also deine Funktion wäre so wohl funktionsfähig:
Delphi-Quellcode:
procedure Delete(index: Integer);
begin
 meinarray[i].Free;
 for i := index to High(meinarray) - 1 do
   meinarray[i] := meinarray[i + 1];
 SetLength(meinarray, High(meinarray));
end;
oder
Delphi-Quellcode:
procedure Delete(index: Integer);
begin
 meinarray[i].Free;
 for i := index + 1 to High(meinarray) do
   meinarray[i - 1] := meinarray[i];
 SetLength(meinarray, High(meinarray));
end;
Zitat:

Das scheint auch zu funkionieren.
tut es auch soweit.

Zitat:

Doch bleibt das letzte Element erhalten, also muss ich es noch entfernen.
stimmt geneu, das muß weg ... zumindestens der Object-Zeiger daruf.

allerdings muß auch das zu löschende Element weg und zwar komplett. :warn:



Zitat:

Erstmal meinarray[length(meinarray)].free; und dann wollte ich mit Setlength(meinarray, length(meinarray) -1) den Array kürzen.
SetLength stimmte ja, nur darfst du das objekt nicht freigeben ... du hast es doch nach vorne kopiert.
Wenn du das machst, dann würde ja der letzte Eintrag im Array freigegeben (auch der kopierte ... sind ja schließlich das selbe Objekt :zwinker: )

PS: da du nur den Objektzeiger auf das i-te Element überschrieben hast, bleibt dennoch die Objektinstanz erhalten = Speicherleck. :stupid:

Delphi-Quellcode:
Doch funktioniert das nicht.
was genau funktionierte denn nicht? (kann es mir zwar denken, aber die Fehlerbeschreibung von dir ist nicht aussagekräftig.)


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:37 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz