Navigation

3.3.5 Dynamische Speicherverwaltung

Während der Laufzeit ist es oft sinnvoll, dynamisch Speicherplatz anzufordern.

VERBATIM/b335a: 

include <malloc.h>
char *malloc(size)
unsigned size;     /* in Bytes */

Diese Funktion liefert einen Zeiger auf einen Speicherbereich der Länge size oder NULL, wenn der geforderte Bereich nicht bereitgestellt werden kann. Nicht mehr benötigter Speicherplatz kann mit der Funktion free freigegeben werden.

VERBATIM/b335b: 

#include <malloc.h>
char *free(ptr)
char *ptr; 

Dabei muss ptr einen vorher mit malloc angeforderten Bereich adressieren.

Nachfolgendes Programm liest zeilenweise von der Standardeingabe, speichert jede Zeile und gibt diese in umgekehrter Reihenfolge (reverse) wieder aus; beginnend mit der letzten Zeile.

BEISPIELE/b335.c: 

#include <stdio.h>
#include <string.h>
#include <malloc.h>

main() /* Ausgabe der Zeilen in umgekehrter Reihenfolge  */
{
    char *pvek[10000];
    char line[512];
    FILE *fpr;
    int i;

    i=0;
    while((fgets(line,512,stdin)) != NULL) {
        pvek[i]=malloc((unsigned) strlen(line));
        if(pvek[i] == NULL) {
              perror("malloc - no memory:");
              exit(1);
        }
        strcpy(pvek[i],line);
        i++;
    }
    while(--i >= 0) {
       printf("%s",pvek[i]);
       free(pvek[i]);
    }
}

Navigation