Zitat von
Der_Unwissende:
Zitat von
OH:
Der Parameter P muss zu Beginn den Wert nil haben oder auf eine zuvor mit GetMem , AllocMem oder ReallocMem zugewiesene dynamische Variable zeigen.
Das ist bei Dir im Moment nicht der Fall...
Wiso ist das nicht der Fall?
Denn:
Zitat von
OH:
Hat P einen Wert ungleich nil und Size einen Wert ungleich Null, wird der Speicherblock, auf den P zeigt, mit der in Size angegebenen Größe erneut zugewiesen. Diese Operation wirkt sich nicht auf den Inhalt des Speicherblocks aus. Wird der Block jedoch vergrößert, sind die neu zugewiesenen Speicherbereiche nicht definiert. Kann der Block nicht an dieser Position im Speicher reserviert werden, wird er in einen anderen Bereich auf dem Heap verschoben, und der Wert von P wird entsprechend geändert.
Zitat von
Der_Unwissende:
Ja, was dein Array angeht, das vom Typ TPointerlist, so glaube ich dürfte übrigens hier dein Fehler liegen. TPointerList ist der Alias-Typ für ein statisches Array (mit der Festen Größe von 0 .. MaxListSize - 1). Dein Einsatz von ReallocMem ist an dieser Stelle damit (
imho) völlig falsch. Ein statisches Array ist wirklich ein eigener Datentyp, die Größe ist fest. Selbst wenn Du hier eine Adresse gültig übergibst und diese Routine mehr Speicher alloziert, so würdest Du weiterhin nur auf die statische Größe (sinnvoll) zugreifen können...
Ich hatte zuvor an dieser Stelle auch ein Array of PObject, da ich das ganze ähnlich sah, wie du. Jedoch trat dabei der selbe Fehler auf. Daraufhin habe ich mir mal die Deklaration der Klasse TList aus der
Unit Classes angeschaut und musste feststellen, dass sie dort mit einem statischen Array und ReAllocMem arbeiten. Daher habe ich dann das Ganze bei mir ebenfalls mal so umgesetzt, jedoch mit mäßigem Erfolg, da der Fehler ja (leider) immer noch besteht.
Das wäre übrigends ebenfalls ein Punkt: Warum ist das so
EDIT(vergessen):
Wenn ich Pointer nehme, kann ich aber bei den Methoden wie Insert oder Delete die Zeiger mit Move direkt verschieben und erspare mir die Schleife zum umkopieren, die an sich zimlich lanmgsam ist.