AGB  ·  Datenschutz  ·  Impressum  







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

TStringList AddObjects

Ein Thema von MrSpock · begonnen am 13. Mai 2004 · letzter Beitrag vom 13. Mai 2004
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#1

TStringList AddObjects

  Alt 13. Mai 2004, 10:55
Hallo DP Gemeinde,

ich habe gerade einmal einen Test gemacht und war über das Ergebnis überrascht, vielleicht deswegen, weil ich bisher etwas falsch verstanden habe?

Ich habe zwei StringListen erzeugt. Anschließend erzeuge ich 1000 Objekte (TLabel) und weise sie mit AddObjects sowohl der StringList1 als auch der StringList2 zu. Anschließend lösche ich alle Objekte der StringList1 in dem ich explizit StringList1.Objects[i].Free für alle i's aufrufe. Wenn ich jetzt auf das Object über Stringlist2 zugreife, funktioniert das ohne Fehler! Ich dachte, dass die Objekte nur als Verweise gespeichert werden. Stimmt das nicht?
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: TStringList AddObjects

  Alt 13. Mai 2004, 11:01
Zitat von MrSpock:
Ich dachte, dass die Objekte nur als Verweise gespeichert werden. Stimmt das nicht?
Doch, das ist korrekt, aber wenn der Speicher noch nicht andersweitig genutzt wurde, dann gibt es oft keinen Fehler Es passiert aber auch nichts Gutes. Es kommt auch auf die genutzte Property an.

Folgendes geht ohne AV
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  L: TLabel;
begin
  L := TLabel.Create(Self);
  L.Tag := 5;
  L.Free;
  L.Tag := 0;
end;
Dieses geht nur mit AV
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  L: TLabel;
begin
  L := TLabel.Create(Self);
  L.Caption := 'Hi Spockie';
  L.Free;
  L.Caption := 'Bye Spockie';
end;
......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#3

Re: TStringList AddObjects

  Alt 13. Mai 2004, 11:21
Hallo sakura,

das ist ja interessant. Ist es denn auch richtig, dass StringList.Clear NICHT die verknüpften Objekte löscht, sondern dass es Verantwortung desjenigen ist, der die Objekte erstellt hat, diese vor Aufruf von "Clear" manuell zu löschen?
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Benutzerbild von kiar
kiar

Registriert seit: 2. Aug 2003
Ort: Aschersleben
1.362 Beiträge
 
Delphi 5 Professional
 
#4

Re: TStringList AddObjects

  Alt 13. Mai 2004, 11:26
hallo spocky,

das gleiche problem hatte ich auch, du bist selbst verantwortlich die erzeugten objekte zu zerstören

raik
verhältnisse die einem nicht passen,
muss man verändern oder verlassen
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: TStringList AddObjects

  Alt 13. Mai 2004, 11:36
Zitat von MrSpock:
sondern dass es Verantwortung desjenigen ist, der die Objekte erstellt hat, diese vor Aufruf von "Clear" manuell zu löschen?
Vor oder nach, das ist egal. Solange Du noch drauf zugreifen kannst Clear zumindest löscht die Objekte nicht und wenn Du es auch nicht tust, dann gibt es Speicherleichen

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#6

Re: TStringList AddObjects

  Alt 13. Mai 2004, 11:38
Hallo raik,

OK, das ist das was ich vermutet hatte. Ich habe zur Überprüfung oben genanntes Programm geschrieben und war eben überrascht, dass ich die Objekte noch benutzen konnte, obwohl ich sie manuell gelöscht hatte. Aber sakura hat dazu ja die Begründung geliefert. Wie hast du denn geprüft, ob der Speicher wirklich freigegeben wurde?
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: TStringList AddObjects

  Alt 13. Mai 2004, 11:39
Zitat von MrSpock:
Wie hast du denn geprüft, ob der Speicher wirklich freigegeben wurde?
Wozu prüfen, schau Dir mal den Source-Code zu TStringList.Clear an. Da wird lediglich der durch die Liste reservierte Speicher freigegeben - mehr nicht

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#8

Re: TStringList AddObjects

  Alt 13. Mai 2004, 11:43
Hallo sakura,

das ist auch eine Möglichkeit . Ich hatte damals (als ich noch jung war ) unter Turbo Pascal eine Funktion benutzt, die mir den zurverfügungstehenden Speicherplatz zurückgemeldet hat. Ich glaube die hieß MemAvail. Damit habe ich während der Entwicklung des Programmes sichergestellt, dass ich keine Speicherleichen erzeuge. Gibt es eine solche Funktion noch? Bei der komplexen Speicherverwaltung, die in 32-bit BS üblich ist, vermute ich, dass die Antwort nein ist... Oder?
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: TStringList AddObjects

  Alt 13. Mai 2004, 11:44
Schau mal in die CodeLib (alte und neue Einträge) ich sah erst heute was dazu

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von kiar
kiar

Registriert seit: 2. Aug 2003
Ort: Aschersleben
1.362 Beiträge
 
Delphi 5 Professional
 
#10

Re: TStringList AddObjects

  Alt 13. Mai 2004, 12:27
hallo spocky,

bei mir war die sache nur ähnlich, es ging bei mir um ein stringgrid , dort wurden objecte erstellt, wo ich den zustand der einzelnen zellen einstellen, bzw auslesen konnte.

gleichzeitig habe ich die objecte in eine Tlist geschrieben und dann im close bin ich alle objeckte durchgegangen und zum schluß die Tlist.free gemacht. memprof ssagte mir am ende das der speicher leer ist.

ichhabe aber nicht probiert die Tlist zwischendurch zu löschen, sodas ich keine aussage treffen kann, ob die objecte trotz löschen noch im speicher waren

raik
verhältnisse die einem nicht passen,
muss man verändern oder verlassen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 06:13 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