AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Werkzeuge FastMM und block modified after being freed
Thema durchsuchen
Ansicht
Themen-Optionen

FastMM und block modified after being freed

Ein Thema von SBDelphi · begonnen am 27. Apr 2010 · letzter Beitrag vom 3. Mai 2010
Antwort Antwort
SBDelphi

Registriert seit: 10. Jun 2009
10 Beiträge
 
#1

FastMM und block modified after being freed

  Alt 27. Apr 2010, 11:46
Hallo Leute,
ich hab ein kleines Problem mit FastMM.
Beim Beenden der Applikation kommt die Fehlermledung "FastMM detected that a block has been modified after being freed".

Ich bau mir in meiner Applikation einen Baum aus einzelnen Knoten auf. Diese Knoten können von mehreren verschiedenen Typen sein, die alle von einer Basisklasse "A" abgeleitet sind (die wiederum von TObject abgeleitet ist).

Wenn die Applikation nun geschlossen wird, wird der Baum rekursiv gelöscht.

Sofern nur der RootNode vorhanden ist, gibt's auch keinen "Fehlermeldung" von FastMM.
Sobald jedoch ChildNodes vorhanden sind, gibt's eben die Meldung.

Da ich auch nach mehreren Stunden Codeanalyse nicht auf einen ev. Fehler gekommen bin, nun meine Frage ob hier nicht eventuell durch die Rekursion
FastMM auf den Holzweg geleitet wird, da ja Rekursionen den Stack auch beeinflussen.

Hat jemand Erfahrung damit?

Das Löschen auch großer Strukturen funktioniert ohne Exceptions, d.h. ablauftechnisch ist der Source soweit i.O, nur eben die Beeinflussung des Stacks nicht....

Bin für jeden Hinweis dankbar!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.058 Beiträge
 
Delphi 12 Athens
 
#2

Re: FastMM und block modified after being freed

  Alt 27. Apr 2010, 11:57
Das bedeutet, (a) daß du die Fehlerprüfung von FastMM aktiviert hast
und (b) daß irgendwo ein Speicherbereich verändert wurde, nach dem der entsprechende Speicherblock (welcher an dieser Stelle lag) schon freigegeben wurde.

Quasi sowas in der Art:
Delphi-Quellcode:
var P: PInteger;

P := GetMem(10);
FreeMem(P);
P^ := 100;
FastMM gibt ja speicher nicht sofort an Windows zurück, weswegen es bei einem späteren Zugriff nicht zu einer Zugriffsverletzung kommt.

Uhrsache könnte auch ein Bufferoverrun sein
oder ein "fehlerhafter" Pointer, welcher "irgendwo" hinzeigt.

In deinem Fall könnte es auch sein, daß auf ein Objekt zugegriffen wird, welches schon freigegeben wurde. (der Speicherbereich des Objektes könnte ja dennoch existieren)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
SBDelphi

Registriert seit: 10. Jun 2009
10 Beiträge
 
#3

Re: FastMM und block modified after being freed

  Alt 27. Apr 2010, 13:10
führt eine Anweisung
Delphi-Quellcode:
Node.NextNode.Free;

...
...

Node.NextNode:=NIL;
in diesem Fall ebenfalls zu einem "Zugriff"?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.058 Beiträge
 
Delphi 12 Athens
 
#4

Re: FastMM und block modified after being freed

  Alt 27. Apr 2010, 13:16
Nein.
Hier wird nur auf die Variable, aber nicht auf das Objekt zugegriffen.

Hier wäre es ein Zugriff
Delphi-Quellcode:
Node.NextNode.Free;
Node.NextNode.irgendwas ...

PS:
Delphi-Quellcode:
Node.NextNode.Free;
Node.NextNode:=NIL;
entspricht
FreeAndNil(Node.NextNode); Aber Letzteres ist kürzer und es wäre fehlerunanfälliger. (z.B. bei einer Exception innerhalb von .Free )
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
SBDelphi

Registriert seit: 10. Jun 2009
10 Beiträge
 
#5

Re: FastMM und block modified after being freed

  Alt 3. Mai 2010, 12:39
Hab Problem gefunden, war ein "verlorener Zeiger" ganz wo anders im Programm.

Danke für die Hilfe!
  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 08:16 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