Когда вы выделяете ссылку на объект в стеке, она заполняется случайными значениями (то есть предыдущими значениями в стеке - которые могут быть равны нулю в некоторых случаях границы). Это по замыслу.
Чтобы проверить, инициализирована ли переменная, вам сначала нужно будет установить ее вручную на nil
. Это очень быстрое задание.
Типичный шаблон кода может быть:
procedure TForm1.Button1Click(Sender: TObject);
var
sVariable : TStringList;
begin
sVariable := nil; // initialize explicitely
try
(...) // in this hidden part sVariable may be instantiated
if not Assigned(sVariable) then // instantiate if not already done
sVariable:= TStringList.Create;
(...)
finally
sVariable.Free; // will do nothing if sVariable=nil
end;
end;
Обратите внимание, что в вышеприведенном коде я включил (обязательно IMHO) try...finally
блок для освобождения памяти. Если sVariable
не был выделен, это все равно nil
, и в этом случае sVariable.Free
ничего не сделает. Это обычный шаблон лучших практик в Delphi.