On Wednesday 15 August 2001 22:11, Matthias Fichtner wrote:
Hallo,
mein Problem hat sich durch das Hinzufuegen und Verwalten eines Flags in jedem Speicherbereich, das angibt, ob ich den Bereich noch benutzen darf, geloest. Scheinbar kann man mit free() freigegebene Bereiche noch lesen---das nutze ich aus. Nun funktionierts (, glaube ich. :) )
Dass man das noch lesen kann ist nicht immer so. Das kommt ganz auf das Verhalten der jeweiligen Implementation von malloc und die Position des Speicherbereichs an. Manchmal wird der Block auch sofort freigegeben (wenn es der letzte allozierte Speicher auf dem Block war) und das bedeutet, dass die Adresse ungültig wird - Folge: SIGSEGV.
Die einfachste Grundregel für solche Situationen: setze den Pointer auf NULL, wenn er freigegeben wurde. Dann bekommt man bei _jedem_ Test ein SEGV und stößt schneller auf verbliebene Logikfehler.
Konrad