Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TStringlist.assign und addobject? (https://www.delphipraxis.net/63857-tstringlist-assign-und-addobject.html)

Mattze 23. Feb 2006 18:39


TStringlist.assign und addobject?
 
Hallo,

eigentlich müsste es ja, aber da ich mir nicht ganz sicher bin, eine Frage:
Ich habe eine Stringliste erzeugt und ihr ein paar Strings mit addobject (!) zugewiesen.
Als Objekt kommt "TObject(Zeiger)" dazu. Der Pointer ist erzeugt und zeigt auf einen Satz mit Zusatzinfos.
Nun weise ich diese StringList mit assign einer anderen StringList zu. Werden da die Objekte (die Pointer) ordentlich mit zugewiesen, sprich KOPIERT. Also so, dass man sie bei der ersten Liste alle frei geben könnte? Unb wie ist das beim Ende. Man muss diese Pointer sicherlich alle freigeben. Aber wo? In der ersten Liste oder der zweiten Liste oder ist es egal? Muss man die Zeiger danach explizit auf NIL setzen?

Gruß
Matthias

marabu 23. Feb 2006 18:57

Re: TStringlist.assign und addobject?
 
Hallo Matthias,

die Methode Assign kopiert die Zeiger aus der Objects-Eigenschaft - ohne sie zu hinterfragen. Es entstehen zusätzliche Referenzen auf deine records. Beim Zerstören der StringList werden die Zeiger verworfen. Wenn sie die einzigen Referenzen auf deine records sind, dann musst du selbst vorher den von den records belegten Speicher freigeben. Der Platz für die Zeiger selbst wird von der StringList freigegeben.

Grüße vom marabu

Christian Seehase 23. Feb 2006 19:24

Re: TStringlist.assign und addobject?
 
Moin Matthias,

solltest Du die Stringliste den Zeilen eines TMemo oder TRichEdit zuweisen wollen: Hier werden die Objekte nicht mit übernommen.
Deren Abfrage ergibt immer 0.

Mattze 23. Feb 2006 19:59

Re: TStringlist.assign und addobject?
 
Hallo,

danke für die schnelle Antwort.
Nee, ich will tatsächlich die Stringliste einer anderen Stringliste assignen.
(Ich mache sie im Hauptprogramm zurecht und weise sie dann einer Stringliste in einer Komponente zu.)
Die Stringliste im Hauptprogramm gebe danach ich wieder frei.
Das klappt sogar. Aber nur einmal!!!
Wenn ich das neu mache und (natürlich) in der Stringliste der Komponente die ganzen Pointer (mit dispose) frei gebe, nimmt es das irgendwie nicht ernst. Jedenfalls will das Programm dann nicht mehr so richtig und stürzt ab. Mit völlig sinnentleerten Fehlermeldungen!

Gruß
Matthias

Christian Seehase 23. Feb 2006 20:19

Re: TStringlist.assign und addobject?
 
Moin Matthias,

für solche Fälle bietet es sich an das Programm mal mit MemProof zu testen, oder MadExcept einzubauen.
Vielleicht hilft es aber auch schon, wenn Du mal ein wenig Sourcecode zeigst, und mal angibst, welche Fehlermeldungen kommen.
Verwendest Du eventuell (dynamische)Arrays?
Ohne Range-Checking kannst Du Dir auch mit statischen Arrays Probleme einhandeln.


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