Einzelnen Beitrag anzeigen

Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#5

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

  Alt 13. Mär 2011, 13:24
Du verwendest in der Klasse TDecodeTrace zwei Objekte, die du besser übergeben solltest:
Delphi-Quellcode:
constructor TDecodeTrace.create(logger:TLogger; pm:TProtMessages);
begin
  inherited create(true);
  freeOnTerminate := true;
  FStream := TMemoryStream.Create;
  FerrorLog := logger;
  FprotMessages := pm;
end;
Dabei sind FStream, FerrorLog und FprotMessage lokale Felder der Klasse.

Der Destruktor sieht dann so aus:
Delphi-Quellcode:
destructor TDecodeTrace.Destroy;
begin
  FStream.Free;
  sleep(200); // wozu?
  inherited destroy;
end;
Da der Logger und ProtMessage über den Konstruktor übergeben wurden, braucht man die Objekte im Destruktor auch nicht freigeben.
Das liegt dann in der Verantwortung des Aufrufers.
  Mit Zitat antworten Zitat