Speicherleichen

Für Fragen rund um die Ide und zum Debugger
Antworten
Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Speicherleichen

Beitrag von Euklid »

Hallo Leute!

Im Programm Lexart programmiere ich zur Zeit recht große Rekursivfunktionen. Da kommt es öfter vor, dass eine Abbruchbedingung nicht stimmt und das Programm relativ schnell den Speicher des Rechners mit Leichen füllt.

Wenn ich da nicht aufpasse (und das Programm mit kill zwangsbeende) kann das sogar soweit gehen, dass nichts mehr geht (System hängt sich auf).
Gibt es einen Weg, diese Speicherüberläufe zu vermeiden?

Viele Grüße,
Euklid

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

Bei Rekursionen entsteht das Problem eher durch einen Stacküberlauf, schalte einfach die Stackprüfung ein damit Überläufe da unterbunden werden. Wenn du allerdings bei den einzelnen Rekursionen Objekte oder Pointer erzeugst wirst du das Problem nicht gelöst bekommen. Die mußt du gezielt innerhalb der Rekursionen wieder abbauen oder du sammelst die in einer TList und kannst sie dann darüber sauber wieder beseitigen.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Beitrag von Euklid »

Hallo!

Danke! Das war genau das, was ich gesucht hatte. Wusste nur nicht, dass man das seperat einstellen muss.

Viele Grüße, Euklid

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Du kannst ja auch die heaptrc mit einlinken dann siest du sofort wo du memoryleaks erzeugst
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Beitrag von Euklid »

Gut zu wissen. Wenn die Rekursionsfunktion weiter anwächst, werd ich nochmal nachfragen, wie man das macht...

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

In den Compileroptionen unter Linker einfach anhaken, dann compiliert er die mit ein die benutzt nen alternativen speichermanager und alles was nicht gefreet wurde wird dir nach programmbeendigung in messageboxes angezeigt.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Antworten