AGB  ·  Datenschutz  ·  Impressum  







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

Fehler in Delphi-Memory-Manager?

Ein Thema von Motzi · begonnen am 29. Okt 2004 · letzter Beitrag vom 7. Nov 2004
Antwort Antwort
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
Benutzerbild von Motzi
Motzi

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

Re: Fehler in Delphi-Memory-Manager?

  Alt 7. Nov 2004, 13:55
Hat wirklich noch nie jemand ein ähnlich merkwürdiges Verhalten beobachten können..?
Manuel Pöter
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3

Re: Fehler in Delphi-Memory-Manager?

  Alt 7. Nov 2004, 14:00
Zitat von Motzi:
Hat jemand schonmal ähnliche Erfahrungen gemacht?
Ja und zwar mit freigeben von bereits freigegebenen bzw. gar nicht reserviertem Speichern.

Der Delphi-Speichermanager führt einen Lesezugriff auf den reservieren Speicher aus, und bei einem nicht reservierten Block löst das natürlich einen Schutzverletzung aus.

VirtualFree hingegen löst keine aus, liefert aber einen ErrorCode zurück.

Ich würde den Fehler suchen gehen, denn wer weiß, was da noch passieren kann.
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

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

Re: Fehler in Delphi-Memory-Manager?

  Alt 7. Nov 2004, 14:09
Der Speicher ist garantiert noch nicht freigegeben (außer der Speichermanager baut schon vorher mist). Das ganze findet in einer einzigen Prozedur statt, der Speicher wird sonst nirgendwo verwendet sondern ganz normal am Ende der Prozedur freigegeben.
Ich werd mal mitloggen ob VirtualFree einen ErrorCode zurückliefert, aber ich kann es mir nicht vorstellen..!
Manuel Pöter
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#5

Re: Fehler in Delphi-Memory-Manager?

  Alt 7. Nov 2004, 23:19
Moin!

Der Speichermanager von Delphi ist nicht richtig Thread-Safe und daher kann es zu Problemen führen. Ich würde dir mal testweise empfehlen einen anderen Speichermanager zu probieren. Einen Thread-Safe Speichermanager findest du z.B. hier.

MfG
Muetze1
  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 17:57 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