Namensräume
Varianten
Aktionen

std::free

Von cppreference.com
< cpp‎ | memory‎ | c
 
 
Speicherverwaltungsbibliothek
(nur Exposition*)
Algorithmen für uninitialisierten Speicher
(C++17)
(C++17)
(C++17)
Beschränkte uninitialisierte
Speicher-Algorithmen
C-Bibliothek
free


Allocatoren
Speicherressourcen
Unterstützung für Garbage Collection
(C++11)(bis C++23)
(C++11)(bis C++23)
(C++11)(bis C++23)
(C++11)(bis C++23)
(C++11)(bis C++23)
(C++11)(bis C++23)
Uninitialisierter Speicher
Explizites Lebenszeitmanagement
 
Definiert in Header <cstdlib>
void free( void* ptr );

Gibt den zuvor von std::malloc, std::calloc, std::aligned_alloc(seit C++17) oder std::realloc zugewiesenen Speicher 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 std::malloc, std::calloc, std::aligned_alloc(seit C++17) oder std::realloc zurückgegeben wurde.

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

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

Die folgenden Funktionen sind Thread-sicher erforderlich

Aufrufe dieser Funktionen, die eine bestimmte Speichereinheit zuweisen oder freigeben, erfolgen in einer einzigen Gesamtordnung, und jeder solche Freigabeaufruf happens-before die nächste Zuweisung (falls vorhanden) in dieser Ordnung.

(seit C++11)

Inhalt

[bearbeiten] Parameter

ptr - Zeiger auf den freizugebenden Speicher

[bearbeiten] Rückgabewert

(keine)

[bearbeiten] Hinweise

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

[bearbeiten] Beispiel

#include <cstdlib>
 
int main()
{
    int* p1 = (int*)std::malloc(10 * sizeof *p1);
    std::free(p1); // every allocated pointer must be freed
 
    int* p2 = (int*)std::calloc(10, sizeof *p2);
    int* p3 = (int*)std::realloc(p2, 1000 * sizeof *p3);
    if (!p3) // p3 null means realloc failed and p2 must be freed.
        std::free(p2);
    std::free(p3); // p3 can be freed whether or not it is null.
}

[bearbeiten] Siehe auch

C-Dokumentation für free