AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

String Gültigkeit + PChar Verwendung

Ein Thema von stoxx · begonnen am 24. Feb 2008 · letzter Beitrag vom 26. Feb 2008
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#1

String Gültigkeit + PChar Verwendung

  Alt 24. Feb 2008, 19:23
Hallo ...


kann man sicher sein, dass ein String immer bis zum Ende einer funktion oder procedure gültig ist, oder wird der Referenzzähler schon nach der letzten Verwendung zurück gesetzt.

wenn man eine FunktionA hat, in dieser ist eine String Variable deklariert, man übergibt den String einem Object, und und dieses Object hält ein PChar auf diesen String.
Kann man sicher sein, dass der PChar bis zum Ende der FunktionA seine gültigkeit hat, oder kann es vorkommen, dass er dann falsch zeigt?
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: String Gültigkeit + PChar Verwendung

  Alt 24. Feb 2008, 19:25
Zeig mal ein Beispiel für was du meinst
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#3

Re: String Gültigkeit + PChar Verwendung

  Alt 24. Feb 2008, 19:33
Delphi-Quellcode:
procedure TForm1.test;
var s : String;
    obj : TMyClass;
    P : PChar;
begin


  obj := TMyClass.create;
  
  s := '32434';
  obj.machewas(s);
  
  // <- ist hier der String noch ganz sicher verfügbar für das Object?
  // wenn das Object keine eigene FMyStringKopie : String Variable hält,
  // sondern nur ein PChar
  
  // ist der String also noch da, zufällig da (weil vom speichermanager noch nicht überschrieben)
  // oder ist er ganz sicher noch da?
  
  
  P := obj.möchtePchar;
  
  
  
  obj.free;

  
  // <- oder ist der String bis zum Ende der Funktion gültig?

end;
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  Mit Zitat antworten Zitat
Larsi

Registriert seit: 10. Feb 2007
2.262 Beiträge
 
Delphi 2007 Professional
 
#4

Re: String Gültigkeit + PChar Verwendung

  Alt 24. Feb 2008, 19:33
Warum soll Delphi dich belügen???
Weißt net ob du das so meinst aber du könntest den string ja auch global erwähnen!
Ein Tag ohne Delphi ist ein verlorener Tag!

Homepage zu meinem neuen Programm: StreamZ
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#5

Re: String Gültigkeit + PChar Verwendung

  Alt 24. Feb 2008, 19:35
nein, kein globaler String, sonst hätte ich das ja gemacht.
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  Mit Zitat antworten Zitat
Larsi

Registriert seit: 10. Feb 2007
2.262 Beiträge
 
Delphi 2007 Professional
 
#6

Re: String Gültigkeit + PChar Verwendung

  Alt 24. Feb 2008, 19:42
Kannstes nicht ausprobieren? Label1.caption := deinpcharstring
Ein Tag ohne Delphi ist ein verlorener Tag!

Homepage zu meinem neuen Programm: StreamZ
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#7

Re: String Gültigkeit + PChar Verwendung

  Alt 24. Feb 2008, 19:45
Zitat von Larsi:
Kannstes nicht ausprobieren? Label1.caption := deinpcharstring
ja, er ist noch da, die Frage ist aber, ob er noch zufällig da ist, weil der Speicher noch nicht neu genutzt wurde, aber irgendjemand anderes ihn benutzen könnte. (anderer Thread);
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: String Gültigkeit + PChar Verwendung

  Alt 24. Feb 2008, 20:02
Der String ist ganz sicher bis zum Ende der Prozedur vorhanden. Er gehört ja auch der Prozedur und solche lokalen Variablen werden auf dem Stack abgelegt bzw. bei einem String wird auch nur die Adresse abgelegt. Dieser Stackinhalt muss erhalten bleiben, solange die Prozedur abläuft.

Anderer Thread? wie soll das gehen, das ist eine lokale Variable!

Gruss
Thorsten
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#9

Re: String Gültigkeit + PChar Verwendung

  Alt 24. Feb 2008, 20:40
Zitat von omata:
Der String ist ganz sicher bis zum Ende der Prozedur vorhanden. Er gehört ja auch der Prozedur und solche lokalen Variablen werden auf dem Stack abgelegt bzw. bei einem String wird auch nur die Adresse abgelegt. Dieser Stackinhalt muss erhalten bleiben, solange die Prozedur abläuft.

Anderer Thread? wie soll das gehen, das ist eine lokale Variable!

Gruss
Thorsten
hmm ... vielen Dank ... okay .. ich dachte, weil der Debugger ja manchmal anzeigt "Variable kann wegen Optimierung nicht angezeigt werden"
Wo ist die Variable dann hin, und warum kann der Debugger das manchmal nicht anzeigen da?

lg
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#10

Re: String Gültigkeit + PChar Verwendung

  Alt 24. Feb 2008, 21:47
Zitat von stoxx:
Wo ist die Variable dann hin, und warum kann der Debugger das manchmal nicht anzeigen da?
Der Compiler optimiert deinen Code. Deine lokalen Variablen legt er im Normalfall auf dem Stack an. Diesen Speicherbereich kann der Debugger berechnen und somit drauf zugreifen. Wenn der Compiler aber nun optimiert und feststellt, dass du für den PChar die 4 Bytes für dessen Adresse bei dem einen Aufruf holst und dann ein paar Opcodes schon das letzte mal verwendest, dann optimiert er es so um, dass er erst gar kein Speicherplatz auf dem Stack dafür anlegt (Speicherzugriff muss adressiert werden und macht ein wenig Aufwand) sondern einfach den PChar in einem freien Register behält. Damit ist der Code schneller (optimiert), dafür weiss der Debugger aber nicht, wo (bzw. in welchen Register, etc) sich diese Variable gerade befindet.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 16:45 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