Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi SetLength und ARRAY OF Variant (https://www.delphipraxis.net/104162-setlength-und-array-variant.html)

PaulJr 28. Nov 2007 13:13


SetLength und ARRAY OF Variant
 
Hallo Programmierer, :???:

weiß vielleicht jemand wie ich hier MeinArray korrekt freigeben kann?

Ich habe hier etwas im Forum gesucht aber nichts passendes gefunden...

Delphi-Quellcode:
var
   MeinArray  : array of Variant;
   i : Integer;
begin
   (...)
   SetLength(MeinArray, i); // Zuweisung
   (...)
   ??? // Freigabe

end;
Viele Grüße

PaulJr.

mkinzler 28. Nov 2007 13:24

Re: SetLength und ARRAY OF Variant
 
Delphi-Quellcode:
SetLength(MeinArray, 0);

sirius 28. Nov 2007 13:30

Re: SetLength und ARRAY OF Variant
 
Delphi gibt dynamische Arrays auch selber frei, wenn sie nicht mehr gebraucht werden. Wenn also deine Funktion (inkl. einer lokalen dynamischen Variable) dann sowieso zu Ende ist, ist auch keine Freigabe nötig (es würde die FreigabeRoutine nur eben zweimal aufgerufen).

PaulJr 28. Nov 2007 13:46

Re: SetLength und ARRAY OF Variant
 
Hallo MKinzler, :???:

DANKE,

so habe ich auch programmiert... nun wollte ich 100% sicher gehen, dass ich keinen Fehler mache,

da ich mich in einer Schleife befinde, wo ich diese Variable immer neu initialisieren muss, und kriege zur Laufzeit mein Lieblings Fehler:

Zu wenig Arbeitsspeicher für diese Operation

Dies bedeutet also, dass ich an anderen Stellen suchen muss.

Viele Grüße

PaulJr.

P.S.

Danke Sirius, :???: leider befinde ich mich in einer Schleife...

mkinzler 28. Nov 2007 13:57

Re: SetLength und ARRAY OF Variant
 
Ständiges Freigeben und Neuanfordern von Speicher sollte man aber Vermeiden. weil er nicht unbedingt den Vorhandenen Speicherbereich erweitert sondern den neuen Speicher woanders allokiert, den Inhalt kopiert und dann den alten speicher freigibt. so kann es also vorkommen, das temorär etwa doppelt so viel Speicher benötigt wird.

PaulJr 28. Nov 2007 21:31

Re: SetLength und ARRAY OF Variant
 
Hallo MKinzler, :???:

ich werde über Deine letzte Bemerkung etwas nachdenken bzw. etwas ausprobieren…

Sollte ich eine Lösung finden werde ich mich hier melden…

Viele Grüße

PaulJr.

marabu 29. Nov 2007 06:44

Re: SetLength und ARRAY OF Variant
 
Hallo Paul,

vielleicht solltest du dir in der Delphi Online-Hilfe mal das Kapitel zu Finalize() durchlesen.
Wieviele Elemente hat denn dein Array maximal?
Ist das Inkrement immer 1?
Welche Variants steckst du da rein?
Hast du Code in deinem Programm vorgesehen, der mit der Windows Speicherverwaltung kommuniziert?

Grüße vom marabu

SirThornberry 29. Nov 2007 06:50

Re: SetLength und ARRAY OF Variant
 
für mich klingt es auch danach das hier der Speicher zu sehr fragmentiert.

mkinzler 29. Nov 2007 06:54

Re: SetLength und ARRAY OF Variant
 
Was ja auch nicht verwundert, wenn er in einer Schleife ständig die Größe eines dynamischen Arrays verändert.

PaulJr 29. Nov 2007 09:47

Re: SetLength und ARRAY OF Variant
 
Hallo Marabu, SirThornberry und MKinzler, :???:

ich lese sehr aufmerksam was hier geschrieben wird.

Dieses Konstrukt brauche ich für TDataSet.Locate und genau für VarArrayOf(…)

Sobald ich mein Problem behoben habe werde ich mich hier mit Sicherheit melden…

Viele Grüße

PaulJr.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:20 Uhr.

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