網絡上很多前輩提供的方法大多是這樣寫的:
procedure DeleteArrItem(var arr: TArr; Index: Integer); var Count: Cardinal; begin Count := Length(arr); if (Count = 0) or (Index < 0) or (Index >= Count) then Exit; Move(arr[Index+1], arr[Index], (Count-Index)* SizeOf(arr[0])); SetLength(arr, Count - 1); end;
這個方法刪除非結構體動態數組或者不帶string的結構體動態數組一般是沒有問題的。
但是如果結構體中有string類型的數據,那用這個方法就會報內存洩漏。
解決的方法就是給結構體中string類型限定字符,比如string[10],這樣調用上面的方法刪除動態數組中的指定項就不會有問題了。