sizeof
sizeof ist ein Operator in C, der die Größe eines Datentyps oder Ausdrucks in Bytes liefert.
Beispiele:
sizeof(int)
sizeof(mystruct)
sizeof(variable)
sizeof([[pointer]])
Struct vs. Pointer
typedef struct mystruct {
int zahl1;
int zahl2;
int zahl3;
} mystruct;
mystruct test1;
mystruct *test2 = malloc(sizeof(mystruct));
Dann gilt auf vielen Systemen:
sizeof(mystruct) == 12
sizeof(test1) == 12
sizeof(test2) == 8 // auf 64-Bit-Systemen
Grund:
sizeof(mystruct)liefert die Größe des gesamten Struct-Typs.sizeof(test1)liefert die Größe der Struct-Variable.sizeof(test2)liefert nur die Größe des Pointers, nicht die Größe des Objekts, auf das er zeigt.
Für das referenzierte Objekt wäre korrekt:
sizeof(*test2)
Typischer Fehler
Bei dynamischer Speicherreservierung versehentlich nur Pointergröße reservieren:
malloc(sizeof(test2)); // falsch, reserviert nur Pointergröße
Besser:
malloc(sizeof(*test2));