AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

laufzeit-komponenten-array freigeben

Ein Thema von LoL · begonnen am 21. Dez 2004 · letzter Beitrag vom 21. Dez 2004
Antwort Antwort
LoL
(Gast)

n/a Beiträge
 
#1

laufzeit-komponenten-array freigeben

  Alt 21. Dez 2004, 10:04
hi

ich habe zur laufzeit ein array mit komponenten erstellt (in meinem fall mit tabsheets)
Delphi-Quellcode:
for i := 0 to 3 do
  begin
    SetLength(ts_graphen, succ(i));
    tabsheet[i] := TTabSheet.Create(pagecontrol);
    tabsheet[i].PageControl := pagecontrol;
  end;
jetzt möchte gerne folgendes wissen
1. ist der speicher der die 4 tabsheets belegen freigegeben und =NIL wenn ich nur das pagecontrol lösche?
2. wie kann ich die einzelnen tabsheets oder auch allg. die komponenten des arrays einzeln selbst freigeben?

ich dachte so
Delphi-Quellcode:
for i := 0 to 3 do
  begin
    tabsheet[i].Free;
    tabsheet := nil;
  end;
funktioniert auch aber nur beim ersten beim 2. bekomme ich ne exception!
  Mit Zitat antworten Zitat
Benutzerbild von Steve
Steve

Registriert seit: 2. Mär 2004
Ort: Würzburg
730 Beiträge
 
Delphi 2006 Personal
 
#2

Re: laufzeit-komponenten-array freigeben

  Alt 21. Dez 2004, 10:06
Hi,

Versuchs mal so:
Delphi-Quellcode:
for i := 3 downto 0 do
  begin
    FreeAndNil(tabsheet[0]);
  end;
Gruß
Stephan
Stephan B.
Wer andern eine Grube gräbt ist Bauarbeiter!
Wer im Glashaus sitzt, sollte sich lieber im Dunkeln ausziehen!
Außerdem dieser Satz kein Verb...
  Mit Zitat antworten Zitat
LoL
(Gast)

n/a Beiträge
 
#3

Re: laufzeit-komponenten-array freigeben

  Alt 21. Dez 2004, 10:12
nein ich bin doof
so gehts natürlich auch

Delphi-Quellcode:
for i := 0 to 3 do
  begin
    tabsheet[i].Free;
    tabsheet[i] := nil;
  end;
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: laufzeit-komponenten-array freigeben

  Alt 21. Dez 2004, 10:43
zu 1.: Ja ist er. In der Create Methode gibst du den Owner an und der ist für den Speicher verantwortlich. Gibst du den Owner frei, wird auch automatisch der Speicher dessen Child Kontrols freigegeben.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.016 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#5

Re: laufzeit-komponenten-array freigeben

  Alt 21. Dez 2004, 11:54
Wenn man schon OOP betreibt, dann bitte richtig!
Es gibt ein Klasse, das nennt sich TObjectList.
Zitat von Die Delphi-Hilfe:
Mit TObjectList können Sie eine Liste von Objekten speichern und verwalten. Die Komponente stellt Eigenschaften und Methoden für das Hinzufügen, Löschen, Umsortieren, Suchen, Zugreifen und Sortieren von Objekten zur Verfügung. Ist die Eigenschaft OwnsObjects auf True gesetzt (Voreinstellung), verwaltet TObjectList den Speicher seiner Objekte, das heißt, ein Objekt wird freigegeben, wenn sein Index neu zugewiesen wird, wenn es mit der Methode Delete, Remove oder Clear aus der Liste entfernt wird oder wenn die Instanz TObjectList selbst aufgelöst wird.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: laufzeit-komponenten-array freigeben

  Alt 21. Dez 2004, 13:50
Moin Christoph,

SetLength solltest Du nicht in der Schleife aufrufen, sondern das Array, möglichst, gleich auf die erforderliche Grösse bringen, da hier jedesmal Speicher neu angefordert, und der alte Inhalt auf den neuen Platz kopiert wird. Das geht auf die Performance.

Warum dimensionierst Du eigentlich ein Array Namens ts_graphen, und weist dann einem Array TabSheets die Werte zu
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.323 Beiträge
 
Delphi XE2 Professional
 
#7

Re: laufzeit-komponenten-array freigeben

  Alt 21. Dez 2004, 14:06
Hallo,

zu diesem Thema hätt ich auch eine Frage.
Dieses passt auch zu diesem Thread - deshalb mach ich mal keinen neuen Thread auf.

Also:

Ich beschreibe im OnCreate folgendes Array:

Code:
  for i := 1 to length(UpdateIcons) do
    UpdateIcons[i] := TIcon.Create;
und gib dieses Array im OnDestroy wieder frei, nämlich so:

Code:
  FreeAndNil(UpdateIcons);
Reicht das zum Freigeben oder muss ich jedes Array-Element (oder wie man das bezeichen soll) in einer Schleife explizit freigeben?

etwa so:
Code:
  for i := 1 to length(UpdateIcons) do
    FreeAndNil(UpdateIcons[i]);
mfg
Helmi
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: laufzeit-komponenten-array freigeben

  Alt 21. Dez 2004, 14:08
Moin Helmi,

kurze Frage:

Zitat von Helmi:
oder muss ich jedes Array-Element ... in einer Schleife explizit freigeben?
kurze Antwort:
Ja, musst Du.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.016 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#9

Re: laufzeit-komponenten-array freigeben

  Alt 21. Dez 2004, 14:09
Letzteres, denn das Array selber enthält ja nur nen Pointer auf deine Objekte und weiß ja nicht, dass es diese auch löschen soll.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.323 Beiträge
 
Delphi XE2 Professional
 
#10

Re: laufzeit-komponenten-array freigeben

  Alt 21. Dez 2004, 14:10
mmmpf

na gut - dann muss ich das so freigeben

trotzdem Danke
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:39 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