Forum: Compiler & IDEs Speicher in Struktur freigeben


von Jens Z. (bitman)


Lesenswert?

Hallo,

ich habe eine Frage zur Freigabe allozierten Speichers. Ich definiere 
eine Struktur wie folgt:
1
typedef struct {
2
    unsigned int length;
3
    void* data;
4
} DataObject;

Initialisiert wird mittels der folgenden Hilfsfunktion:
1
DataObject* GetDataObject(unsigned int length, void* data)
2
{
3
    DataObject* object = malloc(sizeof(DataObject));
4
    if(object == NULL)
5
    {
6
        return NULL;
7
    }
8
    object->length = length;
9
    object->data = data;
10
    return object;
11
}

*data beschreibt dabei den (void* gecasteten) Zeiger auf einen 
beliebigen Datentyp.
Meine Frage ist nun, ob ich den gesamten Speicher freigebe mit
1
free(dataobject);

oder ob ich *data explizit freigeben muss über
1
free(dataoject->data);
2
free(dataobject);

Ich habe dazu leider nichts gefunden. Danke für eure Hilfe!

Gruß, Jens

von yalu (Gast)


Lesenswert?

Wenn date ebenfalls mit malloc erzeugt wurde, ist die zweite Variante
die richtige. Zu jedem aufgerufenen malloc muss immer genau ein free
aufgerufen werden.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.