Einzelnen Beitrag anzeigen

WorstNightmare

Registriert seit: 6. Okt 2008
159 Beiträge
 
RAD-Studio 2010 Arc
 
#1

A/V bei löschen von Element in Array

  Alt 16. Jul 2010, 23:59
Delphi-Version: 2010
Hallo,

ich habe eine eigene StringListen Klasse für Plugin-DLLs geschrieben, damit ich Classes nicht einbinden muss (und sie somit nicht so aufgebläht werden). Die Liste bietet außerdem einige Extra-Funktionen, z.B. einen Filter darauf anzuwenden, d.h. alle Elemente die Filter nicht enthalten werden gelöscht.

Delphi-Quellcode:
procedure TCSList.ApplyFilter(F: string);
var
  i: Integer;
begin
  for i := 0 to Count - 1 do
    if Pos(F, FArray[i]) = 0 then
      if i = Count - 1 then
        SetLength(FArray, Count - 1)
      else
      begin
        Move(FArray[i + 1], FArray[i], (Count - 1 - i) * 4); // String = 4 Byte Pointer
        SetLength(FArray, Count - 1);
        ApplyFilter(F); // Count geändert, Schleife neustarten
        Exit;
      end;
end;
Das ganze basiert auf einem array of string (FArray), Count gibt einfach nur Length(FArray) aus. Das Problem ist, dass nach einem Durchlauf der Speicher irgendwie korrumpiert wird, denn plötzlich tauchen im Array noch andere Strings die irgendwo in der DLL vorkommen auf und irgendwann ist es dann so kaputt, dass eine A/V geworfen wird.

Vielleicht mögen die String-Pointer es nicht rumgeschoben zu werden? Ich konnte den Fehler nicht finden
  Mit Zitat antworten Zitat