AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Zeigt mir Delphi Speicherlecks in meinem Programm?
Thema durchsuchen
Ansicht
Themen-Optionen

Zeigt mir Delphi Speicherlecks in meinem Programm?

Ein Thema von Henryk · begonnen am 10. Jan 2003 · letzter Beitrag vom 10. Jan 2003
Antwort Antwort
Seite 1 von 2  1 2      
Henryk

Registriert seit: 8. Jan 2003
27 Beiträge
 
#1

Zeigt mir Delphi Speicherlecks in meinem Programm?

  Alt 10. Jan 2003, 12:51
Bei VC sieht man am Ende immer, ob irgendwelche (mit new) angelegten Variablen nicht (mit delete) wieder frei gegeben wurde.

Gibt's sowas bei Delphi oder bin ich bis jetzt so gut und hab noch keine Speicherlecks verursacht?

Henryk
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#2
  Alt 10. Jan 2003, 14:21
Nein, da dieses (auch in VC) nicht verlässlich überprüft werden kann. Das geht max. mit lokalen Variablen, aber selbst da können nicht alle Möglichkeiten erkannt werden. Deshalb gibt es dieses Feature in Delphi wohl nicht, da es sonst zu der Annhame führen könnte: Ah keine Warnung, perfekt!.
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Henryk

Registriert seit: 8. Jan 2003
27 Beiträge
 
#3
  Alt 10. Jan 2003, 14:43
Naja, es funktioniert unter VC recht gut. Man sieht sogar meist, wo der Speicher allokiert wurde. Natürlich gibt es auch Fälle, wo man echt schwer zu kämpfen hat (über Array-Grenzen geschrieben etc.), aber für die paar Faelle gibt's ja Rational-Purify...

Wie macht Ihr das dann? Irgendwelche Extra-Tools oder einfach Programm laufen lassen und Systemmonitor beobachten?

Henryk
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#4
  Alt 10. Jan 2003, 14:48
Na ja, ich mache es mir eigentlich recht einfach. Immer, wenn ich Speicher reserviere ist meine nächste Zeile ein try gefolgt von finally und der Freigabe des Speichers, gefolgt von end;.

Damit geht es ohne Probleme.
......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#5
  Alt 10. Jan 2003, 14:51
Zitat von sakura:
Na ja, ich mache es mir eigentlich recht einfach. Immer, wenn ich Speicher reserviere ist meine nächste Zeile ein try gefolgt von finally und der Freigabe des Speichers, gefolgt von end;.
Hat es eigentlich einen Grund das Du das Try nachem dem reservieren des Speichers machst?

[edit=Sakura]/ für den Abschluss der Quote eingefügt[/edit]
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#6
  Alt 10. Jan 2003, 14:53
Moin Sharky,

das die Reihenfolge

Resource belegen
try
Mit der Resource arbeiten
finally
Resource freigeben
end;

ist liegt einfach daran, dass vor dem belegen der Resource auch, z.B. im Fehlerfalle, nichts freizugeben ist.
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 Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#7
  Alt 10. Jan 2003, 14:56
Zitat von Christian Seehase:
Moin Sharky,

das die Reihenfolge
...
ist liegt einfach daran, dass vor dem belegen der Resource auch, z.B. im Fehlerfalle, nichts freizugeben ist.

Klingt logisch.

><(((°>

^ - Mit dem Kopf an die Wand schlägt.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Henryk

Registriert seit: 8. Jan 2003
27 Beiträge
 
#8

Und wie macht man das bei globalen Resourcen die man anlegt?

  Alt 10. Jan 2003, 15:06
Ich hab zwar nicht diesen Fall, aber interessiert mich.

Also was weiss ich...

z.B. dynamisch irgendwelche Frames mit Create anlegen und an anderer Stelle im Programm hoffentlich wíeder freigeben?

Henryk
  Mit Zitat antworten Zitat
Daniel B
(Gast)

n/a Beiträge
 
#9

[OT]

  Alt 10. Jan 2003, 15:17
Hai Sharky,

Zitat von Sharky:
><(((°>

^ - Mit dem Kopf an die Wand schlägt.
Das sieht dann so aus: ><(((°)

Grüsse, Daniel
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#10
  Alt 10. Jan 2003, 15:18
Moin Henryk,

nicht alle dynamisch belegten Resourcen muss man auch selber wieder freigeben.
Wenn das Objekt ein Create(AOwner : TComponent) hat, und Du dort auch einen Owner angibst (also nicht nil), wird das Objekt automatisch zerstört, wenn der Owner zerstört wird.
In so einem Falle musst Du Dich um die Freigabe also nicht selber kümmern.

Ansonsten empfehlen sich immer für das belegen/freigeben von Resourcen immer die Kombinationen
  • OnCreate/OnDestroy (z.B. eines Formulares)
  • initialization/finalization (einer Unit)
  • try/finally evtl. try/except

Das hängt natürlich davon ab, wie lange das Objekt gebraucht wird, und von wo aus überall der Zugriff erfolgen soll.
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
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 21:26 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