Разрушение памяти в win64 программе?

есть код

procedure FindBestSubtree(DerevoIdx: Integer);
var
*объявление локальных переменных, среди них*
CurrentHashs: THashItem; // мой класс
begin
if Assigned(CurrentHashs) then // тут уже срабатывает
        writelog('Abnormal CurrentHashs', wlCritical);
end;

Показывает, что объект уже создан (и в отладчике даже какие-то данные видны)! Программа многопоточная. Раньше было нормально, начиная с какого-то момента (после форматирования кода?) внезапно стала появляться ошибка (на данный момент только при первом заходе в процедуру). Проблема появилась на совсем ровном месте. Грешу на SSD Samsung 860 QVO диск (явных ошибок нет, но иногда были замечены странности при больших записях или перебоях с электричеством).настройки сборки проекта

Delphi XE6, win 8.1. При сборке под win32 проблема пропадает (почти всегда). Не понимаю куда смотреть.


Ответы (1 шт):

Автор решения: zed

Локальные переменные надо инициализировать перед использованием. Иначе в них будет мусор, с чем вы и столкнулись.

В вашем примере вы объявили CurrentHashs и не проинициализировав его пытаетесь использовать. Функция Assigned просто сравнивает аргумент с nil, но раз мусор это не nil, вот и получается "Abnormal CurrentHashs".

→ Ссылка