Einzelnen Beitrag anzeigen

jbg

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

AW: FastMM4 detected that a block has been modified after being freed

  Alt 13. Mär 2011, 01:25
Es könnte aber auch ein falsch programmierter Destruktor dahinterstecken:
Delphi-Quellcode:
destructor TMyClass.Destroy;
begin
  inherited;
  // Problem: nach Aufruf von inherited ist der Speicher freigegeben
  // daher ist es verboten, jetzt noch damit zu arbeiten
  FTimerInterval := 0;
end;
Falsch. Der Speicher von "Self" wird nicht im "inherited Destroy" freigegeben, sondern vom System._ClassDestroy, dass im "end;" stattfindet.
Delphi-Quellcode:
//Unit1.pas.55: end;
  cmp byte ptr [ebp-$05],$00
  jle +$08 // nur im äußersten "Destroy" ClassDestroy aufrufen
  mov eax,[ebp-$04]
  call @ClassDestroy
  pop ecx
  pop ecx
  pop ebp
  ret
  Mit Zitat antworten Zitat