Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.189 Beiträge
 
Delphi 12 Athens
 
#2

AW: Nutzung von Routinen / Fehler E2016 bei Array

  Alt 2. Mai 2023, 18:53
Nja, kopiert, dein genanntes [i] ist bei dir ein [1], aber egal.
https://github.com/superflexible/TGP...ntMainForm.pas

Außerdem ist der erste Eintrag 0 und nicht 1.



So, Pfxp_names ist erstmal ein Zeiger auf einen Record, welche einen Zeiger auf ein statisches Record-Array enthält.

Also du hast kein eigenes Pfxp_names deklariert, sondern das aus der tgputtylib.pas benutzt? (diese Unit in den Uses)


Zitat:
:= names.names[1].filename;
Eigentlich sollte dürfte Delphi hier alle Zeiger implizit (automatisch) dereferenzieren,
aber du kannst es ja mal explizit versuchen.

:= names^.names^[1].filename;
* der Zeiger auf den Record
* der Zeiger auf das statische Record-Array
* und zum Schluß noch PChar zu String


[EDIT]
"drüfte"
Beim ersten pointer. ist es eindeutig,
aber beim zweiten pointer[ kommt es darauf an, wie es interpretiert wird.

Standardmäßig wird die Zeiger-Arithmetik aktiv sein
und dann wird der Pointer selber als Array behandelt, also ein Array auf den kompletten Subtyp array[0..20000000] of fxp_name , so als würden mehrere 20-Millionen-Arrays hintereinander liegen,
anstatt es hier dereferenziert und dann der Array-Zugriff "innerhalb" des Arrays passiert.

Fazit:
so
:= names.names^[1].filename;
oder so
:= names^.names^[1].filename;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 2. Mai 2023 um 19:02 Uhr)
  Mit Zitat antworten Zitat