Магические” числа в отладке проблем с памятью Mar 05, 2009

Когда в процессе отладки появляется сообщение “Unhandled exception at 0x00416d9f in sailor.exe: 0xC0000005: Access violation reading location 0xfeeefeee.” разработчики, бывают, начинают нервничать. Между тем, шестнадцатеричные коды, как минимум, в Debug-версии приложения, собранном MSVC, уже могут кое о чем рассказать…

Например, после чтения документации совершенно очевидно, что: - программа попыталась использовать память, которая была освобождена через malloc или delete - выполняется Debug-версия программы (в Release-версии memory poisoning по соображениям производительности не выполняется)

Вот некоторые “магические числа”, которые встречаются мне наиболее часто:

Число Пояснение
0xABABABAB Used by Microsoft’s HeapAlloc() to mark “no man’s land” guard bytes after allocated heap memory
0xBAADF00D Used by Microsoft’s LocalAlloc(LMEM_FIXED) to mark uninitialised allocated heap memory
0xCCCCCCCC Used by Microsoft’s C++ debugging runtime library to mark uninitialised stack memory
0xCDCDCDCD Used by Microsoft’s C++ debugging runtime library to mark uninitialised heap memory
0xFDFDFDFD Used by Microsoft’s C++ debugging heap to mark “no man’s land” guard bytes before and after allocated heap memory
0xFEEEFEEE Used by Microsoft’s HeapFree() to mark freed heap memory

Дополнительную информацию можно почерпнуть в MSDN, или, например, здесь.