Страницы

Поиск по вопросам

суббота, 30 ноября 2019 г.

Зачем нужен 0xDEADBEEF?

#c #c++


Я разбираюсь в программе и вижу объявление
unsigned long transfer[TRANSFER_LENGTH] = { 0xDEADBEEF };

а ниже по коду
for (int i = 0; i < TRANSFER_LENGTH; i++)
    transfer[i] = GetData();

Вот зачем присваивать transfer 0xDEADBEEF, а не взять просто 0?    


Ответы

Ответ 1



Потому что DEADBEEF прекрасно видно в hex-dump'е как осмысленная константа 0xDEADBEEF. Вот представьте себе, что Вы анализируете лог обмена и видите там 00000000. Неясно - была передача данных или нет. И что нули означают. А когда получается DEADBEEF понятно, что что-то произошло нехорошее и в каком конкретно месте нужно искать причину. Еще раз поясню, что при нормальном исполнении программы вероятностью увидеть DEADBEEF (или любую другую аналогичную) константу равна 0. А нолей в памяти бывает сколько угодно. Вот на этом игра и ведется. PS: еще обращу внимание на два момента: DEADBEEF по-английски означает 'дохлое мясо' :-) константа DEADBEEF одинаково записывается как строчка и как байты в hex-представлении

Комментариев нет:

Отправить комментарий