Namensräume
Varianten
Aktionen

malloc

Von cppreference.com
< c‎ | memory
Definiert im Header <stdlib.h>
void *malloc( size_t size );

Allokiert size Bytes nicht initialisierten Speicher.

Wenn die Allokation erfolgreich ist, wird ein Zeiger zurückgegeben, der für jedes Objekt mit fundamentaler Ausrichtung geeignet ist.

Wenn size Null ist, ist das Verhalten von malloc implementierungsabhängig. Zum Beispiel kann ein Nullzeiger zurückgegeben werden. Alternativ kann ein Nicht-Null-Zeiger zurückgegeben werden; ein solcher Zeiger sollte jedoch nicht dereferenziert werden und sollte an free übergeben werden, um Speicherlecks zu vermeiden.

malloc ist threadsicher: Es verhält sich so, als würde es nur auf die durch sein Argument sichtbaren Speicherorte zugreifen und nicht auf Speicher an statischen Speicherorten.

Ein vorheriger Aufruf von free, free_sized und free_aligned_sized(seit C23) oder realloc, der einen Speicherbereich freigibt, *synchronisiert sich mit* einem Aufruf von malloc, der denselben oder einen Teil desselben Speicherbereichs allokiert. Diese Synchronisierung erfolgt nach jedem Zugriff auf den Speicher durch die freigebende Funktion und vor jedem Zugriff auf den Speicher durch malloc. Es gibt eine einzige Gesamtordnung aller Allokations- und Freigabefunktionen, die auf einen bestimmten Speicherbereich wirken.

(seit C11)

Inhalt

[edit] Parameter

size - Anzahl der zuzuweisenden Bytes

[edit] Rückgabewert

Bei Erfolg wird der Zeiger auf den Anfang des neu allokierten Speichers zurückgegeben. Um Speicherlecks zu vermeiden, muss der zurückgegebene Zeiger mit free() oder realloc() freigegeben werden.

Bei einem Fehler wird ein Nullzeiger zurückgegeben.

[edit] Beispiel

#include <stdio.h>   
#include <stdlib.h> 
 
int main(void) 
{
    int *p1 = malloc(4*sizeof(int));  // allocates enough for an array of 4 int
    int *p2 = malloc(sizeof(int[4])); // same, naming the type directly
    int *p3 = malloc(4*sizeof *p3);   // same, without repeating the type name
 
    if(p1) {
        for(int n=0; n<4; ++n) // populate the array
            p1[n] = n*n;
        for(int n=0; n<4; ++n) // print it back out
            printf("p1[%d] == %d\n", n, p1[n]);
    }
 
    free(p1);
    free(p2);
    free(p3);
}

Ausgabe

p1[0] == 0
p1[1] == 1
p1[2] == 4
p1[3] == 9

[edit] Referenzen

  • C17-Standard (ISO/IEC 9899:2018)
  • 7.22.3.4 Die Funktion malloc (S. 254)
  • C11-Standard (ISO/IEC 9899:2011)
  • 7.22.3.4 Die Funktion malloc (S. 349)
  • C99-Standard (ISO/IEC 9899:1999)
  • 7.20.3.3 Die Funktion malloc (S. 314)
  • C89/C90-Standard (ISO/IEC 9899:1990)
  • 4.10.3.3 Die Funktion malloc

[edit] Siehe auch

dealloziert zuvor allozierten Speicher
(Funktion) [bearbeiten]
C++ Dokumentation für malloc