Разрушение памяти в 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 шт):
Локальные переменные надо инициализировать перед использованием. Иначе в них будет мусор, с чем вы и столкнулись.
В вашем примере вы объявили CurrentHashs и не проинициализировав его пытаетесь использовать. Функция Assigned просто сравнивает аргумент с nil, но раз мусор это не nil, вот и получается "Abnormal CurrentHashs".