std:: malloc
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Definiert im Header
<cstdlib>
|
||
|
void
*
malloc
(
std::
size_t
size
)
;
|
||
Weist size Bytes nicht initialisierten Speichers zu.
Wenn die Allokation erfolgreich ist, gibt sie einen Zeiger auf das niedrigste (erste) Byte im allokierten Speicherblock zurück, das für jeden skalaren Typ geeignet ausgerichtet ist (mindestens so streng wie std::max_align_t ) ( implizit erzeugt Objekte im Zielbereich).
Wenn size null ist, ist das Verhalten implementierungsdefiniert (ein Nullzeiger kann zurückgegeben werden, oder ein Nicht-Null-Zeiger, der möglicherweise nicht zum Zugriff auf Speicher verwendet werden darf, aber an std::free übergeben werden muss).
|
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 der nächsten Allokation (falls vorhanden) in dieser Ordnung. |
(seit C++11) |
Inhaltsverzeichnis |
Parameter
| size | - | Anzahl der zu reservierenden Bytes |
Rückgabewert
Bei Erfolg gibt die Funktion einen Zeiger auf den Anfang des neu allokierten Speichers zurück. Um einen Speicherverlust zu vermeiden, muss der zurückgegebene Zeiger mit std::free() oder std::realloc() freigegeben werden.
Bei Fehler wird ein Nullzeiger zurückgegeben.
Hinweise
Diese Funktion ruft keine Konstruktoren auf oder initialisiert Speicher in irgendeiner Weise. Es gibt keine einsatzbereiten Smart Pointer, die garantieren könnten, dass die passende Freigabefunktion aufgerufen wird. Die bevorzugte Methode zur Speicherallokation in C++ ist die Verwendung von RAII-fähigen Funktionen std::make_unique , std::make_shared , Container-Konstruktoren, etc, und, in Low-Level-Bibliothekscode, new-expression .
Zum Laden einer großen Datei ist Dateimapping über betriebssystemspezifische Funktionen, z.B.
mmap
unter POSIX oder
CreateFileMapping
(
A
/
W
) zusammen mit
MapViewOfFile
unter Windows, der Zuweisung eines Puffers für das Dateilesen vorzuziehen.
Beispiel
#include <cstdlib> #include <iostream> #include <memory> #include <string> int main() { constexpr std::size_t size = 4; if (auto ptr = reinterpret_cast<std::string*>(std::malloc(size * sizeof(std::string)))) { try { for (std::size_t i = 0; i < size; ++i) std::construct_at(ptr + i, 5, 'a' + i); for (std::size_t i = 0; i < size; ++i) std::cout << "ptr[" << i << "] == " << ptr[i] << '\n'; std::destroy_n(ptr, size); } catch (...) {} std::free(ptr); } }
Ausgabe:
p[0] == aaaaa p[1] == bbbbb p[2] == ccccc p[3] == ddddd
Siehe auch
|
Allokierungsfunktionen
(Funktion) |
|
|
(veraltet in C++17)
(entfernt in C++20)
|
beschafft nicht initialisierten Speicher
(Funktionstemplate) |
|
C-Dokumentation
für
malloc
|
|