Zitat von Graeme Geldenhuys <[email protected]>:
[...]
* ntoc = number of entries in the array. Each entry is a LongWord (or
Int32 in the code below)
* tocarray is my local array that gets populated with information from
the file, using the Move() procedure.
* tocoffsetsstart is the starting offset of the TOC array in the file.
* I then simply look through the number of entries in the array
- position p to file offset as specified by each entry of the array
- extract my data, and continue with the next item in the array
At the end I try to free / dispose of the memory used by my local
array: tocarray
...but whatever I try, heaptrc keeps telling me I have a memory leak
in this code.
--------------------------------------
procedure THelpFile.ReadContents;
var
Topic: TTopic;
EntryIndex: longint;
pEntry: pTTOCEntryStart;
tocarray: array of Int32;
p: PByte;
begin
_Topics.Capacity := _Header.ntoc;
SetLength(tocarray, _Header.ntoc);
p := _Data + _Header.tocoffsetsstart;
Move(p, tocarray, SizeOf(tocarray));
if _Header.ntoc>0 then
Move(p^,tocarray[0],SizeOf(Int32)*_Header.ntoc);
for EntryIndex := 0 to _Header.ntoc-1 do
begin
pEntry := _Data + tocarray[EntryIndex];
Why not simply:
pEntry := _Data + PInt32(p)[EntryIndex];
Topic := TTopic.Create(_Data,
_Header,
_Dictionary,
pEntry );
Topic.HelpFile := Self;
Topic.Index := EntryIndex;
_Topics.Add(Topic);
end;
// Finalize(tocarray); <--- doesn't work
not needed:
Finalize(tocarray, _header.ntoc); <--- doesn't work
tocarray := nil; <--- doesn't work
end;
Mattias
_______________________________________________
fpc-pascal maillist - [email protected]
http://lists.freepascal.org/mailman/listinfo/fpc-pascal