![]() |
Re: untypisierter pointer
Hallo,
ein Pointer ist nichts anderes als eine Adresse und sonst garnichts! Einem Pointer kann kein Mensch ansehen was an dieser Speicheradresse, auf die er zeigt steht! Aus diesem Grund ist der Ausdruck typisierter Pointer absoluter Quatsch! Rainer |
Re: untypisierter pointer
Und ein typisierter Pointer beinhaltet für den Compiler noch die Information um was für einen Typ von Daten es sich hinter der Adresse handelt auf die der Zeiger zeigt.
|
Re: untypisierter pointer
Hallo Luckie,
das möcht ich sehen. Hast du ein Stück Code? Oder gib mir ein Beispiel für einen "typisierten Pointer" Rainer |
Re: untypisierter pointer
Hallo,
Zitat:
Delphi-Quellcode:
var
tpoint: ^Int64; // Das nennt man einen typisierten, utpoint: Pointer; // das einen untypisierten Pointer! const a: array[0..6] of Int64 = (0,1,2,3,4,5,6); begin tpoint = @a; utpoint = @a; inc(tpoint); inc(utpoint); // hier sollte tpoint^ den Wert 1 und // Int64(utpoint^) den Wert 0 liefern. end |
Re: untypisierter pointer
Hallo runger,
Beispiele für typisierte Zeiger siehst du oben (z.B. im Beitrag von Muetze). Der Compiler prüft deshalb, ob bei einer Zuweisung an diesen Pointer auch der korrekte Typ verwendet wird, d.h. der Pointer zeigt immer auf Strukturen, die ihm vorher in der Definition bekannt gegeben wurde. Über den New Operator kann der Compiler auch feststellen, wieviel Speicherplatz er reservieren muss. |
Re: untypisierter pointer
Hallo,
wenn ihr das so seht OK. Vergesst mein Geschwätz! Danke Rainer |
Re: untypisierter pointer
Irgendwie werde ich den Verdacht nicht los, dass du sauer bist, dass es typisierte Pointer in Pascal gibt. :mrgreen:
Zitat:
|
Re: untypisierter pointer
Also gerade wenn ein Problem mit diesen unsäglichen Pointern behoben ist kommt das nächste:
Ich habe folgenden code:
Delphi-Quellcode:
temp ist vom typen tstringlist.
temp:=tstringlist(listview1.selected.data);
freeandnil(temp); if workarray[0]=nil then showmessage('bla'); data ist ein pointer auf ein tstringlist element des arrays workarray. workarray ist ein array vom typen tstringlist. Wenn ich jetzt zur Laufzeit den ersten Eintrag im Listview löschen will, also den workarray[0] dann soll der zeiger Data vom selektierten Listitem auf temp gespeichert werden, und dann freigegeben werden. Leider klappt aber die Abfrage
Delphi-Quellcode:
nicht. Allerding gibt ein Zugriff auf workarray[0] eine AV. Wie kann ich jetzt abfragen ob workarray[0] nun wirklich freigegeben wurde?
if workarray[0]=nil
Gruß Jan |
Re: untypisierter pointer
Moin!
Die AV kommt doch, weil er schon freigegeben wurde. Du musst nur noch das Array Element 0 löschen... MfG Muetze1 |
Re: untypisierter pointer
Hallo Muetze1,
natürlich bekomm ich eine AV, muss ja auch, es geht mir aber darum, dass ich bei workarray[0]=nil kein true rausbekomme, obwohl das Element ja freigegeben wurde. Wie kann ich also abfragen ob der workarray[i] freigegeben wurde? Gruß Jan |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:29 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz