Initialisierung verschachtelter Strukturen



  • Hallo,

    Da es schwehr ist mit Sicherheit festzustellen, ob eine Struktur tatsächlich (komplett) mit Null initialisiert wird, wollte ich fragen ob dies hier auch der Fall ist:

    struct
    {
       struct {int a; int b;) Affe;
       int Schaffe[9];
    } fubar = {};
    

    Vielen Dank für Eure Hilfe.



  • Afaik werden alle nicht explizit angegebenen Elemente deiner struct mit 0 belegt, wenn du eine Initialisierung angegeben hast. Aber was spricht dagegen, das in der Praxis auszuprobieren 😉 (Debugger nehmen, Programm starten und Inhalt der Variable betrachten)



  • Mit memset bist du auf jeden Fall auf der sicheren Seiten. Zu dem Code da oben .. ka, ob alles auf 0 gesetzt wird. Ich könnte mir jedoch vorstellen, dass das nicht passiert.



  • CStoll schrieb:

    Afaik werden alle nicht explizit angegebenen Elemente deiner struct mit 0 belegt, wenn du eine Initialisierung angegeben hast.

    Das habe ich auch so in Erinnerung (benutze solche Initialisierer eigentlich nie). Aber ich glaube, dass ein leerer Initialisierer {} nicht erlaubt ist. Sollte man evtl. mal im Standard nachlesen.



  • Wenn man positiv überprüft hat, dass Daten mit Nullen belegt sind, kann es doch durchaus sein, dass der Speicherbereich einfach nur "günstig" vorbelegt war.
    Daher wollte ich auf die Debug-Werte nicht vertrauen.

    Habe mir jetzt die Mühe gemacht.

    Aus dem Standard: "An empty initializer-list can be used to initialize any aggregate."

    Schön, da kann ich mir memset sparen.


Anmelden zum Antworten