Einzelnen Beitrag anzeigen

Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#1

Fehler in Delphi-Memory-Manager?

  Alt 29. Okt 2004, 13:26
Hallo,

ich hab ein Programm, das zur Laufzeit dynamisch Speicher per GetMemory reserviert. In diesen Speicher werden dann Daten aus einer Datei eingelesen, verarbeitet und der Speicher wird danach wieder korrekt per FreeMemory freigegeben.

Erste Tests funktionierten wunderbar, im Dauerbetrieb (das Prog ist eine Art Server der per FTP immer wieder Daten reinbekommt die es weiterverarbeiten muss) trat jedoch immer wieder (ohne erkennbares Muster) eine EAccessViolation auf. Das Prog schreibt alle möglichen Aktionen in ein Log-File mit und damit auch solche Exceptions mitgeloggt werden verwend ich madExcept. Ich hab mir nun die von madExcept erstellten Bug-Reports angeschaut und festgestellt, dass die EAccessViolations alle innerhalb des FreeMemory-Aufrufes auftreten und zwar meistens an Zeile 1089 in getmem.inc, aber in manchen Fällen auch an anderen Stellen (ebenfalls in getmem.inc). Ich habe nun mal testweise statt GetMemory/FreeMemory auf VirtualAlloc/VirtualFree umgestellt und jetzt funktioniert alles problemlos. Aber ich versteh nicht warum es mit GetMemory/FreeMemory nicht funktioniert hat...

Ich sollte vielleicht noch erwähnen, dass das Prog mit Threads arbeitet, dh. die Speicherreservierung, Datenverarbeitung und Freigabe erfolgt immer in einem eigenen Thread, allerdings wird der Speicher immer nur innerhalb eines Threads verwendet, ein Synchronisations-Problem (von meiner Seite her) kann es also auch nicht sein.

Hat jemand schonmal ähnliche Erfahrungen gemacht?

Gruß, Motzi
Manuel Pöter
  Mit Zitat antworten Zitat