AGB  ·  Datenschutz  ·  Impressum  







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

Array objekte destroy?

Ein Thema von knoby · begonnen am 21. Apr 2009 · letzter Beitrag vom 22. Apr 2009
Antwort Antwort
knoby

Registriert seit: 30. Okt 2007
6 Beiträge
 
Delphi 7 Enterprise
 
#1

Array objekte destroy?

  Alt 21. Apr 2009, 23:19
Hallo


ich habe da ein Problem ich arbeite schon etwas länger mit Delphi. Auch mit eigenen Klassen, die ich ja mit create erschaffe und dann mit destroy wieder freigebe und ich habe mir angewöhnt Objekte die nicht mehr gebraucht werden sofort freizugeben.

So jetzt zu meinem Problem ich habe eine Klasse erstellt und dann ein Array mit dynamischer länge die während der laufzeit öfter geändert wird.


So wenn ich hinten was dranhänge, dann erstellle ich mit create das neue Objekt. Dann habe ich mir gedacht wenn ich das Array verkürze, gebe ich die nicht merh benötigten mit destroy wieder frei.

Delphi-Quellcode:
    
liste[listbox1.Count -1].Destroy;
setlength(liste,length(liste)-1);
(in Listbox1 und dem Array sind gleichviele Objekte)


Allerdings bekomme ich dann bei erneutem zugriff auf das array Probleme, beim zugriff auf das letzte Element. Meine frage ist jetzt wiso.

Liegt es daran, dass er mit destroy gleich das array einen kürzer macht?


schonmal danke für die Antworten


lg Knoby


oh merke grade ist ins falsche forum gerutscht ... tut mir leid ...
  Mit Zitat antworten Zitat
Cyf

Registriert seit: 30. Mai 2008
407 Beiträge
 
Lazarus
 
#2

Re: Array objekte destroy?

  Alt 21. Apr 2009, 23:24
Bist du sicher, dass bei deinem Zugriff die Arraylänge noch mindestens 1 beträgt?

[Edit]bzw. warum nimmst du die Länge einer Listbox und nicht die des Arrays?
Man kann einen Barbier definieren als einen, der alle diejenigen rasiert, und nur diejenigen, die sich nicht selbst rasieren.
Rasiert sich der Barbier?
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#3

Re: Array objekte destroy?

  Alt 21. Apr 2009, 23:25
Nachdem du nicht mit Length(liste) arbeitest, drängt sich der Verdacht auf, dass eben einfach der Index dann nicht mehr stimmt. Wie äußern sich denn die Probleme?

Übrigens reicht es, das array einfach um eins zu verkürzen, um das letzte Element zu entfernen - der Speicher wird dann ja eh freigegeben
  Mit Zitat antworten Zitat
Cyf

Registriert seit: 30. Mai 2008
407 Beiträge
 
Lazarus
 
#4

Re: Array objekte destroy?

  Alt 21. Apr 2009, 23:28
Zitat von Meflin:
Übrigens reicht es, das array einfach um eins zu verkürzen, um das letzte Element zu entfernen - der Speicher wird dann ja eh freigegeben
Was? Das sollte zu einem Speicherleck führen.
Man kann einen Barbier definieren als einen, der alle diejenigen rasiert, und nur diejenigen, die sich nicht selbst rasieren.
Rasiert sich der Barbier?
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#5

Re: Array objekte destroy?

  Alt 21. Apr 2009, 23:31
Zitat von Cyf:
Was? Das sollte zu einem Speicherleck führen.
Richtig, da die Array Elemente ja explizit erzeugte Instanzen sind.

Aber warum nutzt du keine TObjectList anstatt einem Array? Dort kümmert sich diese automatisch um die Freigabe der Instanzen beim Überschreiben, Löschen der Elemente wie auch beim Clear der Liste.
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Array objekte destroy?

  Alt 21. Apr 2009, 23:41
Zitat von Muetze1:
Zitat von Cyf:
Was? Das sollte zu einem Speicherleck führen.
Richtig, da die Array Elemente ja explizit erzeugte Instanzen sind.

Aber warum nutzt du keine TObjectList anstatt einem Array? Dort kümmert sich diese automatisch um die Freigabe der Instanzen beim Überschreiben, Löschen der Elemente wie auch beim Clear der Liste.
Dito. Dort kannst du ganz sicher sein, solang OwnObjects auf true ist, dass alle Elemente in der Liste auch aus dem Speicher entfernt werden, wenn sie gelöscht werden.
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
knoby

Registriert seit: 30. Okt 2007
6 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Array objekte destroy?

  Alt 22. Apr 2009, 08:32
hey


jo danke das hat mir sehr geholfen, das mit dem Tobjectlist hatte ich auch schon überlegt, da ich aber noch nie so wirklich damit gearbeitet habe habe ich lieber arrays genommen werde es jetzt auf objectlist umschreiben


die probleme äußerten sich insoweit, dass ich nicht mehr auf das letzte objekt zugreifen konnte, also das nicht ein sondern zwei objekte weniger in dem array waren
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Array objekte destroy?

  Alt 22. Apr 2009, 09:10
Nebenbei: Den Destruktor (Destroy) sollte man (wie auch in der Hilfe steht) nie selbst direkt aufrufen, sondern Free benutzen.
Sebastian Jänicke
AppCentral
  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 21:36 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