Einzelnen Beitrag anzeigen

PMM

Registriert seit: 17. Feb 2005
101 Beiträge
 
#4

Re: Brett vorm Kopf: Wo ist der Wert meines Pointers?

  Alt 19. Jun 2009, 08:35
Nur so zur Sicherheit. Mit:
Code:
fAirportIndizes.Add(tmp, PInteger(s));
übergibst du, statt einem Zeiger auf s, den akt Wert von s (also den Integer-Wert) und sagst dem Compiler, dass dies schon OK.
Mit:
Code:
Index := Integer(pIndex);
sagst du dem Compiler, das der Wert der Variablen pIndex gar kein Zeiger ist, sondern ein Integer-Wert. Das funktioniert, weil ein Integer auch nur 32 Bit belegt, also in den Speicherplatz für einen Pointer reinpasst.

In deinem ursprünglichen Ansatz
Code:
pi := @s;
fAirportIndizes.Add(tmp, pi);
gab es dann noch das Problem, dass die Variable s, da innerhalb der Procedure deklariert, auf dem Stack liegt. Der Zeiger pi referenzierte also eine Addr. im Stack, die nach dem verlassen der Procedur auf jeden Fall ungültig war.
PMM
  Mit Zitat antworten Zitat