Namespaces
Variants

malloc

From cppreference.net
Definiert in Header <stdlib.h>
void * malloc ( size_t size ) ;

Weist size Bytes nicht initialisierten Speichers zu.

Wenn die Allokation erfolgreich ist, gibt sie einen Zeiger zurück, der für jeden Objekttyp mit fundamentaler Ausrichtung geeignet ausgerichtet ist.

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

malloc ist threadsicher: Es verhält sich so, als ob es nur auf die Speicherbereiche zugreift, die durch sein Argument sichtbar sind, und nicht auf statischen Speicher.

Ein vorheriger Aufruf von free , free_sized , und free_aligned_sized (seit C23) oder realloc , der einen Speicherbereich freigibt, synchronisiert mit einem Aufruf von malloc , der denselben oder einen Teil desselben Speicherbereichs allokiert. Diese Synchronisation 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 Deallokationsfunktionen, die auf jeden bestimmten Speicherbereich wirken.

(seit C11)

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 free() oder realloc() freigegeben werden.

Bei Fehler wird ein Nullzeiger zurückgegeben.

Beispiel

#include <stdio.h>   
#include <stdlib.h> 
int main(void) 
{
    int *p1 = malloc(4*sizeof(int));  // weist Speicher für ein Array von 4 int zu
    int *p2 = malloc(sizeof(int[4])); // dasselbe, mit direktem Typnamen
    int *p3 = malloc(4*sizeof *p3);   // dasselbe, ohne Wiederholung des Typnamens
    if(p1) {
        for(int n=0; n<4; ++n) // füllt das Array
            p1[n] = n*n;
        for(int n=0; n<4; ++n) // gibt es zurück aus
            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

Referenzen

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

Siehe auch

gibt zuvor allokierten Speicher frei
(Funktion)