Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Aus Dynamischen Array Hersusschneiden. (https://www.delphipraxis.net/76366-aus-dynamischen-array-hersusschneiden.html)

Hawkeye219 3. Sep 2006 13:30

Re: Aus Dynamischen Array Hersusschneiden.
 
Verlasse dich nicht allzu sehr auf die Anzeige im Taskmanager. Der MemoryManager von Delphi könnte die Speicherblöcke durchaus noch reserviert haben, um sie bei nachfolgenden Anforderungen wieder zur Verfügung zu stellen. In diesem Fall wird sich der angezeigte Wert im Taskmanager kaum ändern.

Einen Hinweis auf tatsächliche MemLeaks erhältst du, wenn du die Projektdatei folgendermaßen erweiterst:

Delphi-Quellcode:
begin
  {$WARN SYMBOL_PLATFORM OFF}                       // <<-- diese Zeile hinzufügen
  ReportMemoryLeaksOnShutdown := (DebugHook <> 0); // <<-- diese Zeile hinzufügen
  Application.Initialize;
  ...
end.
Wenn du jetzt dein Programm in der Delphi-IDE laufen läßt, erscheint beim Beenden eine Dialogbox mit Hinweisen auf MemLeaks, sofern welche vorhanden sind. Besonders informativ ist die Anzeige leider nicht. Sie zeigt nur an, daß nicht alle angeforderten Speicherblöcke zurückgegeben wurden, aber nicht, wo dies passiert. Um diese Stellen zu finden, wirst du andere Werkzeuge einsetzen müssen. In der DP gibt es einige Threads zu diesem Thema.

Gruß Hawkeye

shifter 3. Sep 2006 19:07

Re: Aus Dynamischen Array Hersusschneiden.
 
Danke für Dein Tip,

ich habe exack so wie du es beschrieben gemacht,
leider bekomme ich nichts raus, also kein DialogBox oder ne meldung.

seba

Flare 3. Sep 2006 19:49

Re: Aus Dynamischen Array Hersusschneiden.
 
Zitat:

Zitat von Hawkeye219
..., sofern welche vorhanden sind.

Dann sind höchstwahrscheinlich keine MemLeaks vorhanden :zwinker:

Flare

Neutral General 3. Sep 2006 19:57

Re: Aus Dynamischen Array Hersusschneiden.
 
Also ich weiß nicht obs schon gesagt wurde aber ich mache es einfach so:

Delphi-Quellcode:
procedure DeleteItem(var AArray: TArrayofKa; Index: Integer);
var tmp: TArrayofKa;
    i,j: Integer;
begin
  j:= 0;
  SetLength(tmp,Length(AArray)-1);
  for i:= 0 to High(AArray) do
   if i <> Index then
   begin
    tmp[j] := AArray[i];
    inc(j);
   end;
   AArray := tmp;
end;
So in etwa :stupid:

Gruß
Neutral General

Khabarakh 3. Sep 2006 20:58

Re: Aus Dynamischen Array Hersusschneiden.
 
Da finde ich Move aber ein wenig eleganter :zwinker: .

MStoll 3. Sep 2006 22:32

Re: Aus Dynamischen Array Hersusschneiden.
 
Hallo

Warum so kompliziert?

Delphi-Quellcode:
procedure delete_arr_item(var arr : tbyte_arr; idx : integer); overload;
var x : integer;
begin
     for x := idx + 1 to high(arr) do
         arr[x-1] := arr[x];
     SetLength(arr, length(arr) - 1)
end;
Ist vll nicht die schnellste, aber sicher eine der kürzesten Varianten.

[Edit]Allerdings lässt sie alle Elemente "in Ruhe", die eh nicht verändert werden (d.h. die mit einem Index < als idx)[/Edit]

Gruß
Michael


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:49 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