Matthias Frey wrote:
> Gefunden!
>
> Hauptproblem war eine Klasse die ein Interface implementierte.
> Die Referenzzählung die Delphi dann automatisch macht wurde
> ausgehebelt (wie das so häufig gemacht wird). Nun wurde das
> Objekt freigeben, es war aber noch eine Interface-Referenz
> da, die danach auf nil gesetzt wurde. Delphi ruft dann
> _Release auf, aber das Objekt war schon zerstört.
Vieleicht nur die Variable nilen? Aber ist das wirklich nötig?
Pointer(Variable) := nil;
> Frappierend für mich war, dass der Fehler mit FullDebugMode
> schon im Code vor Monaten auftritt, ohne der Fehler erst
> neuerdings Symptome verursachte.
Das kann passieren mit ungültigen Referenzen.
> Ich denke aber es liegt
> einfach daran, dass FastMM Speicher der freigegeben wird
> mit Nullen überschreibt.
Tut er das wirklich?
>
> Was mich noch interessieren würde, wie man feststellt um
> welches Interface es geht.
> Der Fehler tritt immer auf in der Datei System.pas,
> function _IntfClear(var Dest: IInterface): Pointer;
> Zeile: CALL DWORD PTR [EAX] + VMTOFFSET IInterface._Release
> auf. Im Debugger ist Dest nicht auswertbar. Der Callstack
> ist auch nicht sehr erhellend.
Was steht in der MemoryManager_EventLog.txt?
Hier ein kleiner Test:
procedure TForm1.Button1Click(Sender: TObject);
var
IntfVar: IInterFace;
begin
Obj:= TNoARCInterfacedObject.Create;
IntfVar := Obj;
Obj.Free;
IntfVar := nil; // <== hier wird _IntfClear aufgerufen Zeile Nr. 40
end;
FastMM has detected an attempt to use an interface of a freed object. An access violation will now be raised in order to abort the current operation.
The current thread ID is 0x13B8, and the stack trace (return addresses) leading to this error is:
409B8F [System.pas][System][@IntfClear][28061]
4B372E [Unit1.pas][Unit1][TForm1.Button1Click][40]
47280D [Controls.pas][Controls][TControl.Click][7190]
49A66B [StdCtrls.pas][StdCtrls][TCustomButton.Click][4562]
49B159 [StdCtrls.pas][StdCtrls][TCustomButton.CNCommand][5023]
47229F [Controls.pas][Controls][TControl.WndProc][7074]
76577038 [GetWindowLongW]
711AB4C9 [Unknown function at ImageList_GetIcon]
711AB575 [Unknown function at ImageList_GetIcon]
765762FA [Unknown function at gapfnScSendMessage]
76576D91 [Unknown function at GetThreadDesktop]
--
Arno