Namespaces
Variants

std:: malloc

From cppreference.net
< cpp ‎ | memory ‎ | c
Memory management library
( exposition only* )
Allocators
Uninitialized memory algorithms
Constrained uninitialized memory algorithms
Memory resources
Uninitialized storage (until C++20)
( until C++20* )
( until C++20* )
( until C++20* )

Garbage collector support (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
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