Sinn von ZeroMemory() ?



  • Hallo zusammen,

    Oft finde ich in Listing z.B. folgende Konstruktion

    MSG message;
    ZeroMemory(&message, sizeof(MSG));
    ...
    

    In Kommentaren steht dann, dass mit ZeroMemory() evtl.
    vorhandene Speicherreste gelöscht werden sollen.
    Muss das überhaupt sein ? Ich dachte ja, dass bei der
    Erzeugung eines Objektes der Konstruktor alle Membervariablen
    mit 0 initialisert.

    Wäre schön, wenn mich jemand erleuchten würde.

    Biff



  • Der Sinn eines Konstruktors besteht darin alle Variablen zu initialisieren. Das heisst, der der den Konstruktor schreibt SOLLTE dies wirklich tun. Von alleine geschieht hier jedoch garnichts. Insbesondere wird ein automatisch vom Compiler generierter Konstruktor so etwas nicht von selbst erledigen. Und damit ein Programmierer das auch selbst tun kann, gibt es Funktionen wie diese.
    Ich würde wahrscheinlich memset vorziehen, aber jeder so wie er möchte...

    mfg JJ



  • MSG ist nur ein C-Struct.

    Dort gibt es keinen Konstruktor.

    Also wenn du die MSG-Instanz mit GetMessage befüllen lässt, ist das ZeroMemory sinnlos. Aber manchmal will man nicht alle Member ausfüllen und das ist es hilfreich.



  • Gerade in WinAPI ist ZeroMemory() an vielen Stellen zweckmäßig, denn oft hat man große Strukturen zu füllen und dabei die Hälfte mit NULL oder 0. Vorher ein ZeroMemory(), und man kann sich die Hälfte sparen. 🙂



  • Zumal ZeroMemory eh nur ein Makro für memset ist...

    #define RtlZeroMemory(Destination,Length) memset((Destination),0,(Length))
    #define ZeroMemory RtlZeroMemory
    

Anmelden zum Antworten