Witam wszystkich. Mam mały kłopot ze zwalnianiem pamięci, a mianowicie:
Tworze sobie wskaźnik do rekordu:
PDokument = ^TDokument;
Potem przy tworzeniu formy mam:
pDok : pDokument;
New(pDok);
// jakiś tam kod
W trakcie działania programu, po zatwierdzeniu zmian mam:
// cos tam - jakiś kod
Dispose(pDok);
Przy zamykaniu formy sprawdzam czy dokument został zakończony:
if Assigned(pDok) then
begin
....... // tu komunikat aby wcześniej zatwierdzić dokument itd.
CanClose := False;
end;
I teraz już, zbaraniałem. Bo przy czymś takim zawsze wykonuje to co w IF-ie jest
New(pDok);
Dispose(pDok);
if Assigned(pDok) then
begin
// ta część się wykonuje, a nie powinna
end;
Czytałem że zamiast Free; lepiej użyć Dispose();
Czy w takim razie mam po każdym Dispose() dodawać jeszcze pDok := NIL ?
Mogę użyć FreeAndNil() zamiast Dispose(), ale w czasie działania programu w kilku miejscach sprawdzam, lub zwalniam pamięć i wtedy mi się wykrzacza AccessVolation.
Jak najlepiej (najbezpieczniej) allokować, zwalniać i sprawdzać w takim razie wskaźniki na rekordy ?