Christoph: (C) seltsamer calloc-Fehler + Pointerfragen

Beitrag lesen

Moin.

MetaData m1 = (MetaData)malloc(sizeof(MetaData));
Korrekt wäre wohl irgendwie sowas wie:

MetaData *m1 = (MetaData *) malloc (sizeof (MetaData));

Nein, denn

typedef struct metadata *MetaData;

d.h. korrekt wären

MetaData m1 = malloc(sizeof(*m1));

oder

MetaData m1 = malloc(sizeof(struct metadata));

Hier sieht man, warum es nicht unbedingt eine gute Idee sein muss, den Variablentyp mit Hilfe von typedefs zu verschleiern.

Und noch eine Bemerkung: Das casting des Rückgabewerts von malloc() ist ein C++-Idiom: In C werden void \* implizit bei der Zuweisung konvertiert.

Christoph