Для разработки на С++ для 32-битных систем (будь то Linux, Mac OS или
Windows, PowerPC
или x86) У меня есть инициализированные указатели, которые
в противном случае было бы undefined (например, они не могут сразу
получите правильное значение) так:
int *pInt = reinterpret_cast<int *>(0xDEADBEEF);
(Чтобы сохранить ввод и DRY, правая часть будет обычно быть постоянным, например. BAD_PTR.)
Если pInt разыменовывается до того, как он получит правильное значение, тогда он немедленно сработает на большинстве систем (вместо сбой намного позже, когда какая-то память перезаписывается или собирается в очень длинный цикл).
Конечно, поведение зависит от аппаратное обеспечение (получение 4-байтового целого из нечетного адрес 0xDEADBEEF из пользовательского процесса может быть совершенно действителен), но сбой был на 100% надежным для всех системы, которые я разработал до сих пор (Mac OS 68xxx, Mac OS PowerPC, Linux Redhat Pentium, Windows GUI Pentium, Windows консоль Pentium). Например, на PowerPC это незаконно (шина ошибка), чтобы получить целое число из 4 байтов из нечетного адреса.
Что хорошего для этого в 64-битных системах?