Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   memset in Delphi (https://www.delphipraxis.net/20077-memset-delphi.html)

SleepyMaster 13. Apr 2004 13:14


memset in Delphi
 
Hi ihrs

Weiß jemand von euch mit welchen Befehl in Delphi man memset (C) vergleichen oder wie man ihn implementieren kann

Vielen Dank schon mal

mirage228 13. Apr 2004 13:19

Re: memset in Delphi
 
Zitat:

Zitat von SleepyMaster
Hi ihrs

Weiß jemand von euch mit welchen Befehl in Delphi man memset (C) vergleichen oder wie man ihn implementieren kann

Vielen Dank schon mal

Wenn ich mich nicht irre, heisst der Befehl in Delphi "ZeroMemory"

mfG
mirage228

Giantics 13. Apr 2004 13:22

Re: memset in Delphi
 
Oder auch:

Delphi-Quellcode:
procedure FillChar(var X; Count: Integer; Value: Byte);
Beschreibung

FillChar füllt Count aufeianderfolgende (Parameter X) Bytes mit dem in Value angegebenen Wert des Typs Byte oder Char.

@SleepyMaster: Bist du zufällig unter einem anderen Namen ab zu auch im Spotlight-Forum? :wink:

bttb930 13. Apr 2004 13:26

Re: memset in Delphi
 
Ja, FillChar benutze ich auch immer, etwa zum initialisieren:

Delphi-Quellcode:
FillChar(aRecord, SizeOf(aRecord), #0);

SleepyMaster 13. Apr 2004 13:30

Re: memset in Delphi
 
OK! Vielen Dank!

@Giantics: Wie kommst du darauf??? Nein!

Giantics 13. Apr 2004 13:32

Re: memset in Delphi
 
Zitat:

Zitat von SleepyMaster
@Giantics: Wie kommst du darauf??? Nein!

Dort hat jemand haargenau die gleiche Signatur wie du. War nur so ein Gedanke :-D

Cyf 8. Okt 2008 19:13

Re: memset in Delphi
 
Weiß jemand, ob sich an FillChar etwas durch die Umstellung auf Unicode-Strings ändern wird bzw. ob es sinnvoll ist die Funktion zum Füllen von Byte-Arrays zu benutzen?

Cyf 11. Okt 2008 13:41

Re: memset in Delphi
 
hoffe, man vergibt mir das :wink:
push

Dezipaitor 11. Okt 2008 14:49

Re: memset in Delphi
 
Wenn du (P)Char array verwendest, dann musst du die Größenangabe ändern. Bei String natürlich auch.

Cyf 11. Okt 2008 15:21

Re: memset in Delphi
 
Also wird an der Funktion selbst nichts verändert werden und sie schreibt weiter die Anzahl Bytes im zweiten Argument.

sx2008 11. Okt 2008 16:43

Re: memset in Delphi
 
Und immer im Hinterkopf behalten: FillChar und ZeroMemory sind brandgefährliche Prozeduren.
Damit kann man sich den Speicher so zerschiesen, dass das Programm nichteinmal in der Lage ist noch eine Fehlermeldung auszugeben.
Manchmal stürzt das Programm auch erst Minuten nach der falschen Verwendung dieser Prozeduren ab.
Solche Fehler sind dann extrem schwer zu finden.

semo 1. Jun 2009 16:43

Re: memset in Delphi
 
was wird denn an dessen stelle empfohlen um den speicher entsprechend zu initialisieren?

Cyf 1. Jun 2009 16:49

Re: memset in Delphi
 
Du kannst einfach eine Schleife (mit Bereichsprüfung) nehmen, das ist allerdings langsamer.
Solange man weiß man tut, finde ich die Verwendung von FillChar und ZeroMemory allerdings nicht verkehrt.

semo 1. Jun 2009 16:51

Re: memset in Delphi
 
Ich denke nämlich auch so...
Habe noch in Erinnerung, dass es in C++ die Funktion SecureZeroMemory gibt (wegen Compileroptimierungen).

Wüsste jetzt aber kein Pendant für Delphi.

jaenicke 1. Jun 2009 17:03

Re: memset in Delphi
 
Zitat:

Zitat von sx2008
Und immer im Hinterkopf behalten: FillChar und ZeroMemory sind brandgefährliche Prozeduren.
Damit kann man sich den Speicher so zerschiesen, dass das Programm nichteinmal in der Lage ist noch eine Fehlermeldung auszugeben.

Das gilt für dynamische Arrays ja genauso. Im Grunde kann man sowas auf viele verschiedene Arten hinbekommen. Man muss eben aufpassen was man da tut.

himitsu 1. Jun 2009 17:07

Re: memset in Delphi
 
nja in C ist ZeroMemory ein Macro, welches eventuell wegoptimiert wird, wenn die Variable zu den zu überschreibenden Daten danach nicht mehr verwendet wird.

Es würde also praktisch der Speicher nicht überschrieben.
SecureZeroMemory ist dagegen wohl eine Funktion und wird nicht wegoptimiert.

in Delphi wird ZeroMemory dagegen immer ausgeführt, also ist es quasi das Selbe wie SecureZeroMemory und darum gibt es diese Secure-Version in Delphi nicht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:18 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 by Thomas Breitkreuz