AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

untypisierter pointer

Ein Thema von Jan · begonnen am 4. Dez 2004 · letzter Beitrag vom 21. Jan 2005
Antwort Antwort
Seite 1 von 3  1 23   
Benutzerbild von Jan
Jan

Registriert seit: 24. Sep 2002
Ort: Magdeburg
491 Beiträge
 
Delphi 7 Enterprise
 
#1

untypisierter pointer

  Alt 4. Dez 2004, 13:19
Hallo DPler,
ich habe in meinem Programm ein TListview, dessen untereigenschaft tlistitem die Eigenschaft "Data" hat, welches ein untypisierter Zeiger auf ein Beliebiges Objekt ist. Über diese Eigenschaft habe ich jetzt die einzelnen Einträge meines Datenarrays verlinkt, (Array of Tstringlist) habe jetzt also einen untypisierten pointer auf ein Tstringlist Objekt. Jetzt muss ich zwei Dinge herausfinden:
Wie kann ich das TStringlist Objekt auf nil setzen, und nicht den pointer, ohne dass ich eine Exception bekomme? Und 2.: gibt es eine Möglichkeit über den Zeiger auf das TStringlist Objekt irgendwie eine referenz auf den Array of Tstringlist zu bekommen, welcher das TStringlist Objekt beherbergt?
Danke an alle die sich die Zeit nehmen das hier zu lesen!
Gruß
Jan
Jan
Wenn die Sonne der Kultur tief steht, werfen auch kleine Gestalten lange Schatten.
  Mit Zitat antworten Zitat
paresy

Registriert seit: 24. Aug 2004
Ort: Lübeck
105 Beiträge
 
Delphi 2007 Professional
 
#2

Re: untypisierter pointer

  Alt 4. Dez 2004, 13:56
Zitat:
Wie kann ich das TStringlist Objekt auf nil setzen, und nicht den pointer, ohne dass ich eine Exception bekomme?
wenn du das objekt im array auf nil setzt, quasi zerstörst... dann erzeugt delphi beim zugreifen über die data property ne exception weil das objekt nicht mehr verfügbar ist.

du müsstest also auch die data property auf NIL setzten und dann mit assigend(data) abfragen

Zitat:
gibt es eine Möglichkeit über den Zeiger auf das TStringlist Objekt irgendwie eine referenz auf den Array of Tstringlist zu bekommen, welcher das TStringlist Objekt beherbergt?
nicht dass ich wüsste bzw den sinn darin sehen würde



poste mal nen code beispiel... dann ist es immer einfach tipps zu geben.

grüße paresy
  Mit Zitat antworten Zitat
Benutzerbild von fiasko
fiasko

Registriert seit: 10. Dez 2002
Ort: Dresden
506 Beiträge
 
#3

Re: untypisierter pointer

  Alt 4. Dez 2004, 16:13
Hallo,

Zitat von Jan:
Und 2.: gibt es eine Möglichkeit über den Zeiger auf das TStringlist Objekt irgendwie eine referenz auf den Array of Tstringlist zu bekommen, welcher das TStringlist Objekt beherbergt?

Delphi-Quellcode:
type
  TMyFunnyArrayType = array of TStringList;
  PMyFunnyArrayPointer = ^TMyFunnyArrayType;

//...

     PMyFunnyArrayPointer(lv.items[1].data)^
// <------------------------------------->
// Das ist jetzt vom Typ array of TStringList
Es kommt jetzt darauf an wie du das Objekt in das data geschrieben hast. Wenn dort ein Zeiger auf ein TStringList steht klappt das wie oben, wenn du einfach das Objekt umgecastet und reingeschrieben hast müßte folgendes gehen:


Delphi-Quellcode:
     TMyFunnyArrayType(lv.items[1].data)
// <------------------------------------->
// Das ist jetzt vom Typ array of TStringList
Für einfach native Typen (die nur aus einem Schlüsselwort bestehen) kann man sich diese indirektionsstufe mit zusätzlichen Typen auch sparen.
Thomas Liske
Posts comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
  Mit Zitat antworten Zitat
Benutzerbild von Jan
Jan

Registriert seit: 24. Sep 2002
Ort: Magdeburg
491 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: untypisierter pointer

  Alt 5. Dez 2004, 16:35
Hallo Paresy!

Also du hast schon recht, das gibt eine exception, wenn man einen pointer dereferenziert, der auf ein nichtmehr vorhandenes Objekt zeigt.
Aber ich hatte schlicht und einfach die Zuweisung des Pointers "data" falsch gemacht, so dass ein löschen eine exception hervorgerufen hat. Habe das aber durch ausführliches Beschäftigen mit pointern alles begradigen können.
Das mit dem Zeiger auf den Array hat den Sinn, dass ich eine Prozedur habe, welche einen übergebenen array in ein Tlistview schreibt. Nun kann es aber vorkommen, dass der array nur eine auswahl von pointern auf objekte vom typ tstringlist innerhalb eines anderen arrays ist. Und ich will innerhalb dieser prozedur aber herausfinden wie groß der array ist, in dem die objekte und nicht die pointer enthalten sind.

Eine weitere Verwendung ist, dass ich innerhalb des Tlistviews ein tlistitem löschen will. Es soll dann auch das objekt vom typ tstringlist gelöscht werden, auf welches der pointer "Data" von dem tlistitem zeigt. Dieses tstringlist objekt befindet sich in einem array of tstringlist.
nachdem ich das element des arrays gelöscht habe, will ich aber auch die länge des arrays aktualisieren, daher brauche ich einen pointer auf den array.


Hallo fiasko!

Das codesegment was du da verfasst hast wandelt doch einen untypisierten Zeiger "data" in einen zeigre vom typ tstringlist um, oder irre ich?
Wenn aber doch "data" ein Zeiger auf ein objekt vom typen tstringlist ist, was habe ich dann gewonnen? ich will ja einen zeiger auf ein anderes objekt haben (auf das übergeordnete array von dem tstringlist objekt), nicht einen typisierten zeiger auf das selbe objekt.
Kann natürlich auch sein, dass ich unfug rede, aber ich kann das hier nicht ausprobieren, werde das machen, sobald ich zuhause bin.



Danke euch beiden vielmals dass ihr euch damit befasst habt!
Gruß
Jan
Jan
Wenn die Sonne der Kultur tief steht, werfen auch kleine Gestalten lange Schatten.
  Mit Zitat antworten Zitat
Benutzerbild von fiasko
fiasko

Registriert seit: 10. Dez 2002
Ort: Dresden
506 Beiträge
 
#5

Re: untypisierter pointer

  Alt 5. Dez 2004, 18:10
Hallo,

Zitat von Jan:
Das codesegment was du da verfasst hast wandelt doch einen untypisierten Zeiger "data" in einen zeigre vom typ tstringlist um, oder irre ich?
Nein, er macht daraus ein array of TStringList.

Zitat von Jan:
ich will ja einen zeiger auf ein anderes objekt haben (auf das übergeordnete array von dem tstringlist objekt), nicht einen typisierten zeiger auf das selbe objekt.
Hmm, was meinst du denn mit übergeordbete array von dem TStringList Objekt ? Ich glaub ich hab noch nicht richtig kapiert worauf du deinen Pointer haben möchtest ...
Thomas Liske
Posts comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
  Mit Zitat antworten Zitat
Benutzerbild von Jan
Jan

Registriert seit: 24. Sep 2002
Ort: Magdeburg
491 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: untypisierter pointer

  Alt 7. Dez 2004, 12:37
Hallo Fiasko!
Ich hab einen Array of tstringlist, der eine Filmliste speichert. Die einzelnen tstringlists speichern also jeweils einen Film.
Ich habe jetzt einen Zeiger auf einen dieser Filme, will aber über diesen Zeiger irgendwie an einen Zeiger auf den Array of tstringlist kommen, in dem die Filme gespeichert sind, damit ich dort auslesen kann, wieviele Filme ich in der Filmliste habe.
Gruß
Jan
Jan
Wenn die Sonne der Kultur tief steht, werfen auch kleine Gestalten lange Schatten.
  Mit Zitat antworten Zitat
Benutzerbild von fiasko
fiasko

Registriert seit: 10. Dez 2002
Ort: Dresden
506 Beiträge
 
#7

Re: untypisierter pointer

  Alt 7. Dez 2004, 12:41
Hallo,

das geht so nicht. Du kannst nicht schauen wo es überall einen Zeiger auf dein Objekt gibt, du mußt dir also selber irgendwo dein array of TStringList speichern.
Thomas Liske
Posts comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
  Mit Zitat antworten Zitat
runger
(Gast)

n/a Beiträge
 
#8

Re: untypisierter pointer

  Alt 7. Dez 2004, 12:55
Hallo,

was bitte schön ist ein untypisierter Zeiger?
Gibts auch typisierte Zeiger?
Der Ausdruck ist schon in sich Quatsch!

Rainer
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#9

Re: untypisierter pointer

  Alt 7. Dez 2004, 13:03
Moin!

Zitat von runger:
Hallo,

was bitte schön ist ein untypisierter Zeiger?
Gibts auch typisierte Zeiger?
Der Ausdruck ist schon in sich Quatsch!

Rainer
Bitte:

Pointer = untypirisierter Zeiger - ein Zeiger auf Daten unbestimmten Typs und daher kann man auch nicht sagen wie gross die Daten sind auf die der Pointer zeigt. Daher kann man auch schlecht mit New() eine Variable des Typs Pointer anlegen lassen - man muss die Grösse angeben.

PChar, PInteger, einfach ein Zeiger auf einen Typen: ^typ = typirisierter Zeiger. Wenn man diesen nutzt weiss der Compiler wie gross die Daten sind auf die der Zeiger zeigt und kann daher u.a. mit einem einfachen New() genügend Speicher reservieren.

Und nun sag mir was daran Quatsch ist und was es daran nicht geben sollte...

MfG
Muetze1
  Mit Zitat antworten Zitat
Benutzerbild von fiasko
fiasko

Registriert seit: 10. Dez 2002
Ort: Dresden
506 Beiträge
 
#10

Re: untypisierter pointer

  Alt 7. Dez 2004, 13:05
Hallo,

Zitat von runger:
was bitte schön ist ein untypisierter Zeiger?
Gibts auch typisierte Zeiger?
Ja gibt es. Ein PChar ist ein typisierter Zeiger. Wenn man z.B. typisierte Zeiger inkrementiert/dekrementiert landet man "hinter" dem vorherigen Element, und nicht nur ein Byte weiter. Außerdem muß man sie nicht casten

Zitat von runger:
Der Ausdruck ist schon in sich Quatsch!
Heute wohl mit dem falschen Bein aufgestanden?! Der Ausdruck an sich kann nicht quatsch sein, da "typirisert" und "Zeiger" laut Duden nix miteinander zu tuhen haben ( sich auch nicht widersprechen)
Thomas Liske
Posts comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz