Thema: Delphi Pointer-Problem

Einzelnen Beitrag anzeigen

Benutzerbild von Hador
Hador

Registriert seit: 11. Dez 2004
Ort: Recke
682 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Pointer-Problem

  Alt 25. Jan 2007, 20:47
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.
Lars Kiesow
http://www.larskiesow.de

Computer gehorchen deinen Befehlen, nicht deinen Absichten.
  Mit Zitat antworten Zitat