std:: free
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Definiert in Header
<cstdlib>
|
||
|
void
free
(
void
*
ptr
)
;
|
||
Gibt den zuvor durch std::malloc , std::calloc , std::aligned_alloc (since C++17) oder std::realloc allokierten Speicher frei.
Wenn ptr ein Nullzeiger ist, tut die Funktion nichts.
Das Verhalten ist undefiniert, wenn der Wert von ptr nicht einem früher von std::malloc , std::calloc , std::aligned_alloc (since C++17) oder std::realloc zurückgegebenen Wert entspricht.
Das Verhalten ist undefiniert, wenn der Speicherbereich, auf den
ptr
verweist, bereits freigegeben wurde, das heißt,
std::free
oder
std::realloc
bereits mit
ptr
als Argument aufgerufen wurde und keine Aufrufe von
std::malloc
,
std::calloc
,
std::aligned_alloc
(since C++17)
oder
std::realloc
zu einem Zeiger geführt haben, der gleich
ptr
ist danach.
Das Verhalten ist undefiniert, wenn nachdem
std::free
zurückgekehrt ist, über den Zeiger
ptr
zugegriffen wird (es sei denn, eine andere Allokationsfunktion hat zufällig zu einem Zeigerwert geführt, der gleich
ptr
ist).
|
Die folgenden Funktionen müssen thread-sicher sein:
Aufrufe dieser Funktionen, die eine bestimmte Speichereinheit allozieren oder deallozieren, erfolgen in einer einzigen Gesamtordnung, und jeder solche Deallokationsaufruf happens-before dem nächsten Allokationsaufruf (falls vorhanden) in dieser Ordnung. |
(seit C++11) |
Inhaltsverzeichnis |
Parameter
| ptr | - | Zeiger auf den freizugebenden Speicher |
Rückgabewert
(keine)
Hinweise
Die Funktion akzeptiert (und macht nichts mit) den Nullzeiger, um die Menge an Sonderbehandlungen zu reduzieren. Unabhängig davon, ob die Allokation erfolgreich ist oder nicht, kann der von einer Allokationsfunktion zurückgegebene Zeiger an
std::free
übergeben werden.
Beispiel
#include <cstdlib> int main() { int* p1 = (int*)std::malloc(10 * sizeof *p1); std::free(p1); // jeder allokierte Zeiger muss freigegeben werden int* p2 = (int*)std::calloc(10, sizeof *p2); int* p3 = (int*)std::realloc(p2, 1000 * sizeof *p3); if (!p3) // p3 null bedeutet, dass realloc fehlgeschlagen ist und p2 freigegeben werden muss. std::free(p2); std::free(p3); // p3 kann unabhängig davon freigegeben werden, ob es null ist oder nicht. }
Siehe auch
|
C-Dokumentation
für
free
|