Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

malloc - Speicherplatz reservieren

&pagelevel(4)&pagelevel

Definition

#include <stdlib.h>

void *malloc(size_t anz);

malloc beschafft zur Ausführungszeit zusammenhängenden Speicherplatz in der Größe von anz Bytes.

malloc ist Teil eines C-spezifischen Speicherverwaltungspaketes, das angeforderte und wieder freigegebene Speicherbereiche intern verwaltet. Neue Anforderungen werden zuerst aus bereits verwalteten Bereichen zu erfüllen versucht, dann erst vom Betriebs-system (vgl. Funktion garbcoll).

Returnwert

Zeiger auf den neuen Speicherbereich



falls malloc neuen Speicherplatz zuweisen konnte. Dieser Zeiger kann für beliebige Datentypen verwendet werden.

 

NULL-Zeiger

falls malloc den Speicherplatz nicht beschaffen konnte, z.B. weil der noch vorhandene Speicherplatz nicht ausreicht oder ein Fehler auftrat.

Hinweise

Der neue Datenbereich beginnt auf Doppelwortgrenze.

Die tatsächliche Länge des Datenbereichs beträgt:
Angeforderte Länge anz + 8 Bytes für interne Verwaltungsdaten. Diese Summe wird ggf. auf die nächste Zweierpotenz aufgerundet.

Wenn malloc in der Liste der freien Blöcke nicht genug Speicherplatz findet, wird intern die Funktion memalloc aufgerufen, um vom System mehr Speicherplatz zu bekommen.

Um sicherzugehen, dass Sie ausreichend Platz für eine Variable anfordern, sollten Sie die Funktion sizeof verwenden.

Wird die Länge des zur Verfügung gestellten Speicherbereiches beim Schreiben überschritten, führt dies zu schwerwiegenden Fehlern im Arbeitsspeicher.

Falls anz den Wert 0 besitzt, liefert malloc eine eindeutige Adresse, die auch an free übergeben werden kann.

Beispiel 1

Folgender Programmausschnitt fordert Speicherplatz für 30 integer-Elemente an:

#include <stdlib.h>
int *int_array;
    .
    .
    .
int_array = (int *)malloc(30 * sizeof(int));

Beispiel 2

Dynamische Speicherplatzreservierung für Gebrauchtwagen-Informationen:

#include <stdio.h>
#include <stdlib.h>
#define MAX 20;
struct pkw {
       char   *typ;
       int    alter;
       long   kilometer;
       char   tuev[6];
       int    zust;
       int    preis;
       struct pkw *n;
       } *list;
int main(void)
{
  int mark;
  if((list = (struct pkw *)malloc(sizeof(*list))) == NULL)
    {
      printf("speicherplatz aufgebraucht\n");
      exit(1);
    }
        /* achtung! Beim vorigen malloc-Aufruf wurde für die Komponente typ
           lediglich der Platz für einen Zeiger (4 Bytes) bereitgestellt 
        Der Platz für die Typbezeichnung selbst muss noch beschafft werden: 
*/ 
  if((list->typ = (char *)calloc(1,20)) == NULL)
      exit(1);             /* Fehler */
                           /* Gebrauchtwagen einlesen */
  scanf("%20s %d", list->typ, &list->alter);
  scanf("%d %6s %d %d", &list->kilometer, list->tuev, &list->zust,
   &list->preis);
  list->n = NULL;
                           /* eingelesene Werte ausdrucken */
  printf("%s\n%d\n", list->typ, list->alter);
  printf("%d\n%.6s\n%d\n%d", list->kilometer, list->tuev, list->zust,
   list->preis);
                           /* Speicherplatz wieder freigeben */
  free(list);
  return 0;
} 

Siehe auch

calloc, realloc, free, garbcoll, memalloc, memfree