Definition | #include <stdlib.h> void *malloc(size_t anz);
| |
Returnwert | Zeiger auf den neuen Speicherbereich | |
falls | ||
| NULL-Zeiger | falls |
Hinweise | Der neue Datenbereich beginnt auf Doppelwortgrenze. Die tatsächliche Länge des Datenbereichs beträgt: Wenn Um sicherzugehen, dass Sie ausreichend Platz für eine Variable anfordern, sollten Sie die Funktion 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 | |
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 |