Всегда обнуляйте. Точка.
Сделать это очень просто, используйте либо функцию FillChar, либо ZeroMemory. Я использую второй вариант, поскольку первый вызывает неоднозначные ассоциации. Тем не менее, рассмотрим оба варианта.
FillChar:
FillChar(Rec, SizeOf(Rec), 0);ZeroMemory:
ZeroMemory(@Rec, SizeOf(Rec));
Оба варианта выполняют одно и то же, обнуляют участок памяти.
Теперь расскажу, почему так важно это делать. При объявлении локального идентификатора типа запись не производится его автоматическая инициализация, поля заполнены мусором (за исключением управляемых). В подавляющем большинстве случаев это абсолютно неважно, так как либо ни на что не влияет, либо программистом производится полная инициализация записи перед её использованием. Зато иногда…
Не так давно я напоролся на то, что в Windows XP стабильно генерировалась ошибка доступа к памяти (Access violation), хотя в Windows 7 всё замечательно работало. Причина банальна: я не обнулил запись перед вызовом API-функции SHBrowseForFolder. В семерке это не сказалось, в XP стало фатальным.
Комментариев нет:
Отправить комментарий