Discussion:
Speicherfehler
(zu alt für eine Antwort)
Jens Köhler
2016-12-14 14:34:48 UTC
Permalink
Hallo,

bei meinem Programm erhalte ich beim beenden folgende Fehlermeldung.

FastMM hat einen Fehler entdeckt während einem / einerFreien Block-Scan
Operation. Der Block-Beginn ist defekt.

Ich habe jetzt schon diverse Programmteile auskommentiert bis der Fehler
nicht mehr auftritt, aber ich bin mir sicher, das die gefundene Stelle
den Fehler nicht verursacht. An der Stelle wird nur ein Aufzählungstyp
und ein Text zwischen 2 gültigen Objekten ausgetauscht.

Ich bin das Programm schon einige male durchgegangen, kann aber keinen
Fehler finden.

Wie findet man solch einen Fehler

D5 WindowsXP

Jens
Peter Below
2016-12-15 07:15:19 UTC
Permalink
Post by Jens Köhler
Hallo,
bei meinem Programm erhalte ich beim beenden folgende Fehlermeldung.
FastMM hat einen Fehler entdeckt während einem / einerFreien
Block-Scan Operation. Der Block-Beginn ist defekt.
Ich habe jetzt schon diverse Programmteile auskommentiert bis der
Fehler nicht mehr auftritt, aber ich bin mir sicher, das die
gefundene Stelle den Fehler nicht verursacht. An der Stelle wird nur
ein Aufzählungstyp und ein Text zwischen 2 gültigen Objekten
ausgetauscht.
Ich bin das Programm schon einige male durchgegangen, kann aber
keinen Fehler finden.
Wie findet man solch einen Fehler
D5 WindowsXP
Das ist leider ein sehr schwer zu findender Fehler. Die Ursache ist ein
Stück Code der in einen Speicherbereich schreibt, der über den Memory
Manager angelegt wurde, und dabei über das Ende des allokierten
Bereichs hinaus schreibt. Dabei überschreibt er dann den Anfang des
nächsten Blocks, und da bringt der Memory Manager ein paar
Verwaltungsinformationen unter.

Das Problem dabei ist, dass die Ursache des Fehlers an einer völlig
anderen Stelle des Programms liegen kann, weit weg von der Stelle, an
der der Fehler auffällig wird.

Such nach Stellen im Code, wo Du Funktionen wie Move, FillChar,
ZeroMemory, TStream.Read/ReadBuffer verwendest, also Funktionen, denen
man eine Zieladresse und eine Zahl von Bytes übergibt, die dorthin
geschrieben werden sollen.
--
Peter Below
TeamB
Jens Köhler
2016-12-15 16:22:51 UTC
Permalink
Entschuldigung, das sollte in die Gruppe gehen.
Post by Peter Below
Post by Jens Köhler
Hallo,
bei meinem Programm erhalte ich beim beenden folgende Fehlermeldung.
FastMM hat einen Fehler entdeckt während einem / einerFreien
Block-Scan Operation. Der Block-Beginn ist defekt.
Ich habe jetzt schon diverse Programmteile auskommentiert bis der
Fehler nicht mehr auftritt, aber ich bin mir sicher, das die
D5 WindowsXP
Das Problem dabei ist, dass die Ursache des Fehlers an einer völlig
anderen Stelle des Programms liegen kann, weit weg von der Stelle, an
der der Fehler auffällig wird.
Such nach Stellen im Code, wo Du Funktionen wie Move, FillChar,
ZeroMemory, TStream.Read/ReadBuffer verwendest, also Funktionen, denen
man eine Zieladresse und eine Zahl von Bytes übergibt, die dorthin
geschrieben werden sollen.
danke, so etwas habe ich mir schon gedacht.
Hauptsächlich verwende ich von TList abgeleitete Listen für eine zum
Teil große Anzahl von Objekten. Einige dynamische Arrays sind auch dabei.

Das verwunderliche ist, das auch bei einer noch größeren Anzahl Objekte,
bei der mir FastMM etliche Fehlermeldungen um die Ohren haut,
nach auskommentieren der einen harmlosen Stelle Ruhe herscht.

Also werde ich wohl zum wiederholten Male das Ganze Schritt für Schritt
durchgehen.

Grüße Jens
Jens Köhler
2016-12-22 09:48:33 UTC
Permalink
Post by Jens Köhler
Hallo,
bei meinem Programm erhalte ich beim beenden folgende Fehlermeldung.
FastMM hat einen Fehler entdeckt während einem / einerFreien Block-Scan
Operation. Der Block-Beginn ist defekt.
D5 WindowsXP
Jens
falls es interessiert, nach langer Suche bin ich zufällig darauf
gekommen, ein falscher Typcast hat den Fehler verursacht.

Jens
Peter Below
2016-12-22 17:38:01 UTC
Permalink
Post by Jens Köhler
Post by Jens Köhler
Hallo,
bei meinem Programm erhalte ich beim beenden folgende Fehlermeldung.
FastMM hat einen Fehler entdeckt während einem / einerFreien
Block-Scan Operation. Der Block-Beginn ist defekt.
D5 WindowsXP
Jens
falls es interessiert, nach langer Suche bin ich zufällig darauf
gekommen, ein falscher Typcast hat den Fehler verursacht.
Jens
Oha, das ist wirklich ein Sherlock Holmes grade bug <g>.
--
Peter Below
TeamB
Loading...