Einzelnen Beitrag anzeigen

backdraft

Registriert seit: 19. Apr 2005
Ort: Hückeswagen
335 Beiträge
 
Delphi 11 Alexandria
 
#1

Speicherzugriffsfehler bei Freigabe vom Frame

  Alt 26. Apr 2007, 12:42
Hilfe, ich verzweifel langsam,

ich habe in meinem Programm ein PageControl an der Seite, welches Frames aufnimmt. Diese Frames lege ich zur Laufzeit an,
mit dem Formular als Owner. Auf dem Frames ist eigentlich immer eine ElTree Komponente oder ein ListView.

Zum Freigeben der Frames rufe ich folgende Funktion auf:

Delphi-Quellcode:
 procedure iFreeFrame(aFrame: TFrame);
 var vName: string;
 begin
  IF Assigned(aFrame) THEN BEGIN
   vName := 'unbekannt';
   try
    vName := aFrame.ClassName + '.' + aFrame.Name;
    aFrame.Free; // Darf nicht, sonst crash
   except
    KDRProg1.KDRDebugger.LogError('Kann Frame nicht freigeben: ' + vName);
   end;
   aFrame := nil;
  end;
 end;
Leider fliegt das Programm sporadisch, besonders gerne dann, wenn die Liste Werte hat mit Fehlern raus. Diese kann ich auch nicht über try except abfangen. Er läuft nicht in meine except funktion.

Da ich Eurekalog einsetze kann man eigentlich schön nachvollziehen was passiert (die Bilder sind im Anhang).
Ich finde es aber nicht. Die Zeile in der Delphi über den Debugger beim Free stehen bleibt ist folgende:

Delphi-Quellcode:
function TCanvas.TryLock: Boolean;
begin
  EnterCriticalSection(CounterLock);
  try
    Result := FLockCount = 0;
    if Result then Lock;
  finally
    LeaveCriticalSection(CounterLock);
  end;
end;
Ich habe auch schon alles probiert in einem Testprogramm. Da läuft alles wunderbar. Es ist halt nur im Gesamtprogramm, dass es auf Fehler kommt.

Weiss jemand, wo ich danach suchen kann? Ich bin da ratlos.
Lasse ich die Free Funktion weg, kommt das selbe beim Programmende.
Miniaturansicht angehängter Grafiken
fehler2_242.jpg   fehler1_104.jpg  
Oliver
  Mit Zitat antworten Zitat