Namensräume
Varianten
Aktionen

free

Von cppreference.com
< c‎ | memory
Definiert im Header <stdlib.h>
void free( void *ptr );

Gibt den zuvor von malloc(), calloc(), aligned_alloc(),(seit C11) oder realloc() zugewiesenen Speicherplatz frei.

Wenn ptr ein Nullzeiger ist, tut die Funktion nichts.

Das Verhalten ist undefiniert, wenn der Wert von ptr nicht mit einem Wert übereinstimmt, der zuvor von malloc(), calloc(), realloc(), oder aligned_alloc()(seit C11) zurückgegeben wurde.

Das Verhalten ist undefiniert, wenn der durch ptr referenzierte Speicherbereich bereits freigegeben wurde, d. h., wenn free(), free_sized(), free_aligned_sized()(seit C23) oder realloc() bereits mit ptr als Argument aufgerufen wurde und keine Aufrufe von malloc(), calloc(), realloc(), oder aligned_alloc()(seit C11) später einen Zeiger ergaben, der gleich ptr ist.

Das Verhalten ist undefiniert, wenn nach der Rückgabe von free() über den Zeiger ptr zugegriffen wird (es sei denn, eine andere Speicherzuordnungsfunktion hat zufällig einen Zeigerwert ergeben, der gleich ptr ist).

free ist threadsicher: Es verhält sich so, als ob nur auf die Speicherstellen zugegriffen wird, die über sein Argument sichtbar sind, und nicht auf statischen Speicher.

Ein Aufruf von free, der einen Speicherbereich freigibt, synchronisiert mit einem Aufruf einer nachfolgenden Speicherzuordnungsfunktion, die denselben oder einen Teil desselben Speicherbereichs zuordnet. Diese Synchronisation erfolgt nach jedem Zugriff auf den Speicher durch die freigebende Funktion und vor jedem Zugriff auf den Speicher durch die zuordnende Funktion. Es gibt eine einzige Gesamtordnung aller Speicherzuordnungs- und Freigabefunktionen, die auf einen bestimmten Speicherbereich wirken.

(seit C11)

Inhalt

[bearbeiten] Parameter

ptr - Zeiger auf den freizugebenden Speicher

[bearbeiten] Rückgabewert

(keine)

[bearbeiten] Hinweise

Die Funktion akzeptiert (und tut nichts damit) den Nullzeiger, um den Aufwand für Sonderbehandlung zu reduzieren. Unabhängig davon, ob die Speicherzuordnung erfolgreich ist oder nicht, kann der von einer Speicherzuordnungsfunktion zurückgegebene Zeiger an free() übergeben werden.

[bearbeiten] Beispiel

#include <stdlib.h>
 
int main(void)
{
    int *p1 = malloc(10*sizeof *p1);
    free(p1); // every allocated pointer must be freed
 
    int *p2 = calloc(10, sizeof *p2);
    int *p3 = realloc(p2, 1000*sizeof *p3);
    if(p3) // p3 not null means p2 was freed by realloc
       free(p3);
    else // p3 null means p2 was not freed
       free(p2);
}

[bearbeiten] Referenzen

  • C23-Standard (ISO/IEC 9899:2024)
  • 7.24.3.3 Die Funktion free (S. 365)
  • C17-Standard (ISO/IEC 9899:2018)
  • 7.22.3.3 Die Funktion free (S. 254)
  • C11-Standard (ISO/IEC 9899:2011)
  • 7.22.3.3 Die Funktion free (S. 348)
  • C99-Standard (ISO/IEC 9899:1999)
  • 7.20.3.2 Die Funktion free (S. 313)
  • C89/C90-Standard (ISO/IEC 9899:1990)
  • 4.10.3.2 Die Funktion free

[bearbeiten] Siehe auch

alloziert Speicher
(Funktion) [bearbeiten]
dealloziert zuvor allozierten Speicher mit Größe
(Funktion) [bearbeiten]
dealloziert zuvor allozierten Speicher mit Größe und Ausrichtung
(Funktion) [bearbeiten]