![]() |
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:
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.
begin
{$WARN SYMBOL_PLATFORM OFF} // <<-- diese Zeile hinzufügen ReportMemoryLeaksOnShutdown := (DebugHook <> 0); // <<-- diese Zeile hinzufügen Application.Initialize; ... end. Gruß Hawkeye |
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 |
Re: Aus Dynamischen Array Hersusschneiden.
Zitat:
Flare |
Re: Aus Dynamischen Array Hersusschneiden.
Also ich weiß nicht obs schon gesagt wurde aber ich mache es einfach so:
Delphi-Quellcode:
So in etwa :stupid:
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; Gruß Neutral General |
Re: Aus Dynamischen Array Hersusschneiden.
Da finde ich Move aber ein wenig eleganter :zwinker: .
|
Re: Aus Dynamischen Array Hersusschneiden.
Hallo
Warum so kompliziert?
Delphi-Quellcode:
Ist vll nicht die schnellste, aber sicher eine der kürzesten Varianten.
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; [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. |
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