Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   EMB DCE 12 - GetMem, Char und Delphi default WideChar (https://www.delphipraxis.net/215998-emb-dce-12-getmem-char-und-delphi-default-widechar.html)

paule32.jk 9. Okt 2024 15:17

EMB DCE 12 - GetMem, Char und Delphi default WideChar
 
wenn ich unter der Offline-Hilfe nach "StrCopy" suche, um einen PChar zu kopieren, dann finde ich im angegebenen Delphi Beispiel die Verwendung von GetMem in Verbindung mit sizeOf(Char).

Wir hatten das ja schonmal in der einen oder anderen Form (Free, Destroy).
Heute geht es dadrum, wie man Speicher richtig allokiert und ggf. wieder freigibt.

Da ich GetMem nur in Verbindung mit Dispose her kennen, zeigt das Beispiel jedoch FreeMem.
ist FreeMem der richtige Ansprechpartner oder könnte man dort auch einfach Free verwenden ?

Aber der Hauptaugenmerk ist dieses sizeOf(Char).
Wenn ich zum Beispiel Delphi verwende, dann kann ich zwar PChar verwenden, das ja default mäßig auf Byte mätscht unter Delphi jedoch dann einen PWideChar ergibt.

Daher die Frage: was sollte man am besten verwenden - das sizeof(Char) oder sizeof(WideChar) ?
Ich mein, letzendends ist es ja FreeMem egal, ob mit GetMem 4 Byte allokiert wurde - oder nur 2...

Ich finde das aber irgendwie verwirrend für Anfänger, die nicht Wissen, was denn dieses sizeof(Char) bedeuten mag, wenn sie dann damit konfrontiert werden, das Delphi default WideChar macht...

freimatz 9. Okt 2024 16:13

AW: EMB DCE 12 - GetMem, Char und Delphi default WideChar
 
Man verwendet beim sizeof am Besten das was man auch verwendet.
Der typische Anfänger verwendet weder sizeof, noch GetMem, FreeMem, Dispose, PChar, WideChar oder dergleichen. Er hat solche Probleme nicht denn er verwendet nur string und Char.

himitsu 9. Okt 2024 16:17

AW: EMB DCE 12 - GetMem, Char und Delphi default WideChar
 
Es steht doch eindeutig in der Hilfe?
Zitat:

Dispose gibt den Speicher frei, der für eine Zeigervariable mit System.New zugewiesen wurde. Verwenden Sie für einen Zeiger, der mit System.GetMem zugewiesen wurde, System.FreeMem, um den zugewiesenen Speicher freizugeben. Nach dem Aufruf von Dispose oder FreeMem ist der Wert des übergebenen Zeigers undefiniert.
New -> Dispose
GetMem -> FreeMem
GetMemory -> FreeMemory

StrAlloc bzw. StrNew -> StrDispose


Zitat:

Wenn ich zum Beispiel Delphi verwende, dann kann ich zwar PChar verwenden, das ja default mäßig auf Byte mätscht unter
Nein, das wurde doch bereits mehrfach gesagt.

seit Delphi 2009 ist PChar = PWideChar ... standardmäßig

PChar ist nunmal ein dynamischer/generischer Typ, welcher sich ändern kann, abhängig vom Compiler.
So, wie ursprünglich Integer (im Delphi 1 noch Int16 und dann Int32) ... nur für 64 Bit hatten sich Intel/Microsoft/Andere entschieden den Integer einzufrieren und einen neuen Typen zu erfinden ... im Delphi nennt er sich Delphi-Referenz durchsuchenNativeInt, welcher jetzt Int32 oder Int64 sein kann, bzw. NativeUInt für Cardinal.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:39 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