On 08 Oct 2009, at 15:51, Graeme Geldenhuys wrote:

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));

This has to be

move(p^, tocarray^, length(tocarray)*sizeof(tocarray[0]));

Otherwise you are just moving the contents of "p" into tocarray, and the pointer to the memory allocated for tocarray is gone forever. You're lucky (or unlucky) the program didn't crash when finalising tocarray.

Also, as you can see the program does not really depend on the data being actually stored in a dynamic array. So you could just as well use "tocarray: ^Int32" and assign it the value of p (as you pretty much did until now).


Jonas
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to