Matthias Fichtner msc69mxf@cs.bham.ac.uk schrieb:
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. :) )
Meistens klappt das Lesen aus einem freigegebenen Bereich(*). Allerdings kann man sich auf den gelesenen Wert nicht verlassen, moeglicherweise hat die Speicherwaltung dort schon was reingeschrieben oder den Bereich sogar schon wieder zur Verwendung ausgegeben.
(*) GNU libc gibt den Speicher ans OS zurueck, wenn er entweder mit mmap() geholt wurde (kommt nur bei relativ grossen Anforderungen vor) oder durch das free() der freie zusammenhaengende Bereich am oberen Ende eine bestimmte Groesse ueberschreitet. Bei anderen malloc/free-Implementationen duerfte das aehnlich ablaufen. Die kritischen Groessen sind bei der GNU libc uebrigens einstellbar (RTFM).
Holger