std::free
| 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
|