In meine ersten Artikeln über Heap-Bugs habe ich bereits erwähnt, dass die CRT aber auch Windows selbst Speicher unter bestimmten Umständen vorbelegt bzw. beim Freigeben des Speichers mit einem festen Wert löscht.
Für einen Entwickler ist es gut zu wissen welche Werte durch wen gesetzt werden. Zudem erleichtert einem dieses Wissen auch das Debuggen und die Identifikation von Problemen im Zusammenhang mit dem Heap, deshalb habe ich hier mal diese Magic-Bytes, die von Microsoft verwendet werden hier zusammengetragen.
Würde man im Debugger zum Beispiel eine Variable mit dem Wert 0xCCCCCCCC entdecken, dann ist davon auszugehen, dass man diese Variable auf dem Stack nicht initialisiert hat.
- 0xABABABAB
Wird von HeapAlloc als Wert für die Guard Bytes („no man’s land“) vor und hinter Speicherblöcken verwendet. - 0xBAADF00D
Wird von LocalAlloc(LMEM_FIXED) verwendet um nicht nicht initialisierten Speicher im Heap zu kennzeichnen. - 0xCCCCCCCC
Wird von der Debug-CRT verwendet um nicht initialisierten Stack zu kennzeichnen. - 0xCDCDCDCD
Wird von der Debug-CRT verwendet um nicht initialisierten Speicher im Heap zu kennzeichnen. - 0xDDDDDDDD
Wird von der Debug-CRT verwendet um freigegebenen Speicher im Heap zu kennzeichnen. - 0xFDFDFDFD
Wird von vom Debug-Heap verwendet für Guard Bytes („no man’s land“), vor und hinter Speicherblöcken. - 0xFEEEFEEE
Wird von HeapFree() verwendet um freigegebenen Speicher zu kennzeichnen.
Siehe auch: http://en.wikipedia.org/wiki/Magic_number_(programming)