AGB  ·  Datenschutz  ·  Impressum  







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

StrAlloc verstehen

Ein Thema von Neutral General · begonnen am 1. Aug 2007 · letzter Beitrag vom 1. Aug 2007
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von thkerkmann
thkerkmann

Registriert seit: 7. Jan 2006
Ort: Pulheim Brauweiler
464 Beiträge
 
Delphi 2010 Professional
 
#11

Re: StrAlloc verstehen

  Alt 1. Aug 2007, 15:48
Zitat von Neutral General:
Ja gut was passiert hab ich jetzt verstanden aber der String könnte doch überall im Speicher sein.. Wieso zeigt Result standardmäßig schon am Anfang der Procedure (oder spätestens nach GetMem) auf das erste Zeichen des Strings ? (Müsste ja nach meinem Verständnis).

Wisst ihr was ich meine?
Nee, der zeigt noch nicht auf deinen string....
StrAlloc hat erst mal nur Platz geholt - Du musst jetzt noch was reinschreiben.

  result := DragQueryFile(Msg.WParam, i , Filename, 0); Gruss
Thomas Kerkmann
Ich hab noch einen Koffer in Borland.
http://thomaskerkmann.wordpress.com/
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#12

Re: StrAlloc verstehen

  Alt 1. Aug 2007, 15:49
Zitat von Christian Seehase:
Schon, aber ein PChar braucht auch keine Länge...
Bei Delphi schon. Denn dadurch kannst du einfach StrDispose(myPchar) machen, ohne dir die Länge gemerkt zu haben. Ist quasi ein "advanced PChar".

Edit: Und wenn du den PChar an C übergibst, meckert C auch nicht, wenn vor dem *Char noch ein Longint steht, welches die Länge des *Chars anzeigt (falls es voll gefüllt ist)
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#13

Re: StrAlloc verstehen

  Alt 1. Aug 2007, 16:01
Zitat von Christian Seehase:
Moin Michael,

mit GetMem wird der Speicher reserviert, und die Adresse dieser Reservierung in Result abgelegt.
Jaa aber wie kommen die Zeichen darein? Moment ich male euch mal was...
Miniaturansicht angehängter Grafiken
stralloc_153.jpg  
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#14

Re: StrAlloc verstehen

  Alt 1. Aug 2007, 16:03
Nach strAlloc liegt da auch nur Müll. Meist irgendetwas was du grad zuvor gemacht hast.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#15

Re: StrAlloc verstehen

  Alt 1. Aug 2007, 16:04
Hallo,

was meinst Du mit "wo der String schon drinsteht"? Da steht ja nirgends ein String. Du hast nur Speicher allokiert, der dann zur Speicherung eines Strings verwendet werden kann. Wenn Du also mit StrAlloc() Speicher anforderst, dann musst Du danach auch noch was damit machen...

Gruß
xaromz
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#16

Re: StrAlloc verstehen

  Alt 1. Aug 2007, 16:05
Ehm hat sich erledigt.
Hab jetzt gerade zum Schluss folgende Zeile vergessen:

DragQueryFile(Msg.WParam,i , Filename, size); Das erklärt dann den Rest... Danke an euch alle

Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#17

Re: StrAlloc verstehen

  Alt 1. Aug 2007, 17:43
Zitat von sirius:
Bei Delphi schon. Denn dadurch kannst du einfach StrDispose(myPchar) machen, ohne dir die Länge gemerkt zu haben. Ist quasi ein "advanced PChar".
Falsch. Die 4 Bytes davor stammen noch von Turbo/Borland Pascal. Dort musste man bei FreeMem noch die Allozierungsgröße angeben. StrAlloc/StrDispose arbeitet nur so, weil es abwärts kompatibel ist, wie man an StrDispose mit dem FreeMem(P, Size) sieht. Die Länge für FreeMem kennt der Speichermanager selbst, da er diese Information selbst verwaltet, ggf. sogar direkt vor dem Reservierten Speicherbereich, wodurch folgendes entsteht:
[MemSize: 4 Bytes][Size: 4 Bytes][Data: (Size - 4) Bytes]
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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:13 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