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.