On 16/11/2013 01:03, Timothy Groves wrote:

Here's the code I *actually* have in the method:

var
  index,
  last : integer;
begin
  last := length (t_volumes) - 1;
  index := 0;
  while ((t_volumes [index] <> t_current_volume) and (index < last)) do
      inc (index);
  if (index < last) then begin
    t_volumes [index] := t_volumes [last];
Objects are actually stored via a reference (internal pointer)
So t_volumes [last] just points to the objects data

The above statement duplicates the reference

t_volumes [last].Destroy;

destroys the object pointed to by both: t_volumes [last] and t_volumes [index]

You should have destroyed t_volumes [index] *before* copying the value

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

Reply via email to