Witam mam problem ze zwalnianiem pamieci i chce prosic was o pomoc.
BlockHeader, jest recordem
BlockEntries to dynamiczna tablica z recordu BlockEntry
pBlockEntries to pointer recordu BlockEntry
procedure Read(s : TStream);
var
i : integer;
Size : Integer;
begin
s.ReadBuffer(BlockHeader, sizeof(BlockHeader));
Size := BlockHeader.BlockCount * sizeof(TBlockEntry);
SetLength(BlockEntries, BlockHeader.BlockCount);
GetMem(pBlockEntries, Size);
for i:=0 to BlockHeader.BlockCount do
begin
pBlockEntries := @BlockEntries[i];
Inc(pBlockEntries);
end;
Dec(pBlockEntries, BlockHeader.BlockCount);
s.ReadBuffer(pBlockEntries^, Size);
end;
Napisalem Klase wiec w destruktorze jest FreeMem(pBlockEntries) i oczywiscie inherited.
Niewiem czy to takie trudne ale FreeMem ani Dispose nie dziala w tym przypadku. Wywalo mi blad przy uwalnianiu. Blod nie pojawia sie gdy nie przypisze adresow pamieci dla BlockEntries. Probowalem przd FreeMem ustawic BlockEntries (tablice) na nil ale nie pomaga. Prosze bardzo o pomoc a jesli to raczej nie mozwlie to chcialbym wiedziec czy jest jakis inny sposob zeby wczytac dane do pointera a potem rozdzielic adresy do tablicy. Dzieki.