AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Probleme mit Data (Pointer)

Offene Frage von "Chatfix"
Ein Thema von ranftl · begonnen am 22. Mai 2006 · letzter Beitrag vom 26. Feb 2007
Antwort Antwort
Seite 2 von 4     12 34   
Benutzerbild von Chatfix
Chatfix

Registriert seit: 10. Dez 2003
Ort: Schneeberg
39 Beiträge
 
#11

Re: Probleme mit Data (Pointer)

  Alt 24. Feb 2007, 21:43
Und jetzt nochmal für dumme zum mitschreiben bitte

Wenn ich vor dem ListView-Clear die Items durchlaufe, was muss ich alles beachten?

Delphi-Quellcode:
if Assigned(ListItem.Data) then
  Dispose(PString(ListItem.Data));
Da nicht unbedingt alle Items einen Pointer erhalten.

Vielen Dank schonmal im Vorraus
Marcel Kukelka
MfG Chatfix
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#12

Re: Probleme mit Data (Pointer)

  Alt 24. Feb 2007, 22:18
Sollte so hinhauen, ja. Du musst übrigens nicht auf "PString" casten.

btw. was ist "PString"?
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#13

Re: Probleme mit Data (Pointer)

  Alt 25. Feb 2007, 06:24
PString ist ein Pointer auf einen String.

Imho sollte man den Pointer so casten, damit Dispose weiß, wieviel es freigeben muss.
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#14

Re: Probleme mit Data (Pointer)

  Alt 25. Feb 2007, 10:04
Hmm... das könnte schief gehen. machs lieber so:

Delphi-Quellcode:
type
  PString = ^TStringRec;
  TStringRec = record
    str: string;
  end;
Und dann musst du das noch finalisieren:

Delphi-Quellcode:
if Assigned(ListItem.Data) then
begin
  Finalize(ListItem.Data);
  Dispose(ListItem.Data);
end;
Das Finalisieren ist wichtig, damit Delphi auch den String selbst freigibt. Ein String ist nänmlich eigentlich eine Klasse, und ich hab jetzt nicht genügend Code von dir um zu sehen, ob da alles koscher abläuft.

Du musst übrigens nicht casten, denn wenn du den Speicherbereich per New() alloziiert hast, weiß der MemoryManager, wie viel er an dieser Speicheradresse alloziiert hat. Und Dispose weiß dann auch ohne cast, wie viel freigegeben werden muss.

EDIT: Mooooment mal... ist "PString" schon in Delphi-Systemunits deklariert? Dann sollte die Compilermagic da eh kräftig mitmischen... zeigt mir das doch mal
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#15

Re: Probleme mit Data (Pointer)

  Alt 25. Feb 2007, 11:19
Zitat von DGL-luke:
Hmm... das könnte schief gehen.
Eigentlich sollte das nicht schief gehen, denn der Vorteil von New() und Dispose() ist ja gerade der, das diese Routinen (im Gegensatz zu GetMem() und FreeMem()) mit langen Strings umgehen können.

Edit:
Zitat von Die Delphi-Hilfe ©Borland:
Finalize sollte nur in Delphi-Quelltext verwendet werden, in dem eine dynamisch erstellte Variable nicht mit der Prozedur Dispose freigegeben wird.
Edit2:
Ok, du hast doch recht. .... nur woher hab ich das mit dem Dispose und den langen Strings ... und außerdem: In der Praxis funktionierts
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#16

Re: Probleme mit Data (Pointer)

  Alt 25. Feb 2007, 13:39
@DGL-luke: Ein paar Fragen zu deinem letzen Beitrag:

1. Warum ein Record mit nur einem String und nicht direkt Zeiger auf den String? Was soll der Unterschied sein?
2. Das Finalize sollte den Typ bekommen, also PString und nicht einfach nur einen Pointer. Daher bin ich mir nicht sicher, ob Finalize überhaupt in der Form des Aufruf was macht bzw. machen kann. Da ihm der Typ unbekannt ist und er einen untypisierten Zeiger bekommt, kann er nichts ausrichten.
3. Wie du selber schreibst, ist Finalize bei Dispose unnötig. Wenn man nun also das Finalize entfernt, dann sollte Dispose auch den richtigen Zeigertyp bekommen, damit er denn finalisieren kann, sonst fehlt auch ihm das Wissen über den Typ der Struktur. Dieses wird vom Speichermanager nicht abgelegt
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#17

Re: Probleme mit Data (Pointer)

  Alt 25. Feb 2007, 13:47
Bevor ich hier noch irgendwas sage, will ich ein Codeschnipsel mit der Deklaration von PString sehen. Hugh.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.262 Beiträge
 
Delphi 2006 Professional
 
#18

Re: Probleme mit Data (Pointer)

  Alt 25. Feb 2007, 13:57
Moin Lukas,

Zitat von DGL-luke:
Bevor ich hier noch irgendwas sage, will ich ein Codeschnipsel mit der Deklaration von PString sehen.
Da Du eine Pro-Version hast:
PString in der IDE eingeben, und mit gedrückter STRG-Taste anklicken...
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#19

Re: Probleme mit Data (Pointer)

  Alt 25. Feb 2007, 14:04
Ach so ist das also. Na dann is ja klar, dass man sich da nicht drum kümmern braucht(wie ich bereits schrieb). ein einfaches Dispose(PVar) sollte dann reichen, tuts ja auch.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#20

Re: Probleme mit Data (Pointer)

  Alt 25. Feb 2007, 14:56
und um nochmal auf meine Ausführungen zurück zu kommen: ein Dispose(PVar), wenn PVar vom richtigen Typ ist. Ein Dispose auf einen untypisierten Pointer bringt nix in Sachen Finalize.
  Mit Zitat antworten Zitat
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 04:28 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf