type
  TGroundItems = packed record
    ItemsID:DWORD;
    Name:string;
    X,Y:Word;
    time:Cardinal;
  end;
  
  
  var
   FFieldItems:array of TGroundItems;   //地面物品黑名单数组procedure DeleteFFieldItems;  //删除动态数组元素
var
    Count: Cardinal; //tarr数组长度
  index: Integer;  //要删除的数组索引,FfielditemsO数组
  iii:Integer;
begin
  EnterCriticalSection(MyCs); //进入临界区
  try   //刷新数据后,把 超时的物品删除掉
   for iii :=  low(FFieldItems) to high(FFieldItems)  do
   begin
    if  (gettickcount - FFieldItems[iii].time > 180000 ) and (FFieldItems[iii].ItemsID >0)  then
    begin
       // Form1.Memo15.Lines.Add('删除掉不存在的物品'+ffielditems[iii].name);
       Count := Length(FFieldItems);
       index := iii;
       if (Count = 0) or (Index < 0) or (Index >= Count) then exit;
       Move(FFieldItems[Index+1], FFieldItems[Index], (Count-Index)* SizeOf(FFieldItems[0]));
       SetLength(FFieldItems, Count - 1);
    end;
   end;
    finally
    LeaveCriticalSection(MyCs); //离开临界区
  end;
end;
在执行删除数组元素时,总会过一段时间就产生读写地址错误,请问删除操作,那段代码不对,请各位朋友指教一下