![]() |
Änderung eines Strings / Zeiger darauf
Hallo
Ein String ist doch ein Array of Char. Wenn nun der Inhalt des Strings geändert wird, müsste doch eigentlich für das neue Array auch neuer Speicherplatz angefordert werden, damit der neue Inhalt da reinpasst. Und der alte Speicherplatz wird wieder entfernt. Was ist, wenn man einen Zeiger hat, der auf das alte Array zeigte? Denn eigentlich müsste dieser Zeiger auf einen ungültigen Speicherbereich zeigen. Wie wird das intern geregelt? Danke |
AW: Änderung eines Strings / Zeiger darauf
![]() Zitat:
|
AW: Änderung eines Strings / Zeiger darauf
Wenn eine String-Variable intern einen Zeiger auf den dynamisch zugewiesenen String enthält und ich einen Zeiger auf die String-Variable zeigen lasse, zeigt sozusagen ein Zeiger auf einen anderen Zeiger. Und damit auf einen gültigen Speicherbereich.
Richtig? |
AW: Änderung eines Strings / Zeiger darauf
Kommt drauf an wie lange dein Zeiger lebt, denn selbst wenn der String durch andere Referenzen weiter lebt, dann kann die Variable, auf welche dein Zeiger zeigt, schon lange weg sein.
Und nein, der String-Speicher verschiebt sich nicht sofort immer ... Es kommt drauf an was geändert wird und wie, ob FastMM den Speicher InPlace vergrößern/verkleinern kann und ob es noch weitere Referenzen auf den String gibt. Ja, wenn das verschoben wurde, dann zeigt dein Zeiger ins nichts, oder vermutlich eher auf was "Anderes" und behandelt wird sowas natürlich nicht, denn keiner, außer du, weiß von der Referenz dem Zeiger, also mußt du das auch selber abfangen. |
AW: Änderung eines Strings / Zeiger darauf
Zitat:
|
AW: Änderung eines Strings / Zeiger darauf
Vielen Dank. Das hilft mir weiter.
Bei der Gelegenheit: Ich wusste nicht, daß Unicode-Strings 4 Byte (8 Byte bei 64bit) haben. Ich dachte gelesen zu haben, daß Unicode-Char's 2 Byte besitzen. Aber das war eine Info zu C# und dem .net Framework. Ich nahm an, das das bei allen Sprachen identisch ist. |
AW: Änderung eines Strings / Zeiger darauf
Es gibt verschiedene Unicodetypen:
-UTF-8( UCS): variablel; die 1. 127 Bit sind ASCII und zu ANSI kompatibel 1-4: Linux, alte Unicodeimplementierungen in Delphi (WideString) -UTF-16: variable -UCS2: 2 Zeichen fest, Standardformat von Windows -> Delphi UnicodeString -UCS4: 4 Zeichen fest |
AW: Änderung eines Strings / Zeiger darauf
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:48 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