dein fehler ist leicht zu beheben:
Delphi-Quelltext
1:
| for i:=1 to fFileCount do pFileFound^[i]:=pTemp^[i]; |
und mit dem dynamischen array ist es klar:
du musst natürlich die pointerdeklaration wegnehmen:
Delphi-Quelltext
1:
| pFileFound: TFileFound; |
zur erklärung: mit getmem holst du dir zusammenhängenden speicher.
stell dir einfach vor, du hast nen datenblock, in dem deine aktuellen daten stehen.
wenn du also mehr brauchst, muss der datenblock größer werden.
also: alten block sichern, datenblock freigeben und größeren holen, alte daten wiederherstellen, neue daten einfügen
stimmt also
bei dyn arrays setzt du die länge erst zur laufzeit. und intern macht delphi genau das oben beschriebene.
aber kurz:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| SetLength(MyArray,0); SetLength(MyArray,Length(MyArray)+1); MyArray[High(MyArray)]:=...SetLength(MyArray,0); |
ansonsten wäre für dieses thema entweder ein buffer besser (einfach gesagt, ein array mit unterschiedlichen werten für anzahl der einträge und maximaler eintragsgröße; das spart das ständige vergrößern und somit umkopieren-->schneller)
oder eine verkettete liste (gar kein umkopieren)