malloc ist definiert in der stdlib
, die in C über stdlib.h
, bzw. in C++ über cstdlib
eingebunden wird.
malloc() reserviert einen Speicherblock in der angegebenen Größe. Der Zeiger auf das erste Byte wird zurückgegeben oder NULL, falls kein Speicher alloziiert werden konnte. Der Speicherblock, der vom Betriebssystem zur Verfügung gestellt wird, ist nicht initialisiert, so dass willkürliche Werte in diesem Bereich liegen.
#include <stdlib.h> void * malloc ( size_t size );
size: Größe des Speicherblocks, Angabe in Bytes.
Die Rückgabe ist ein Zeiger auf das erste Byte des zugeteilten Speicherblocks (oder NULL, falls kein Speicher zugeteilt wurde) und wird als Datentyp (void *) geliefert. In C wird (void *) auf jeden beliebigen Zeigerdatentyp implizit konvertiert. In C++ muss gecasted werden. Da viele C Programme mit C++ Compilern kompiliert werden, sollte der Typ inzwischen grundsätzlich als Cast vor den malloc()-Aufruf gesetzt werden.
Sobald Arbeitsspeicher nicht mehr benötigt wird, muss er mit der Funktion free() wieder freigegeben werden.
#include <stdio.h> #include <stdlib.h> int main( void ) { int i,n; char * buffer; printf ("Wieviele Sterne? "); scanf ("%d", &i); buffer = (char*) malloc( 1 + i ); // Am Ende des C-Strings wird zusätzlich // ein Nullbyte als Endmarkierung benötigt if( buffer != NULL ) { buffer[i]='\0'; // Nullbyte setzen while( i-- ) buffer[i] = '*'; printf( "%s\n", buffer ); free( buffer ); // Wichtig! Speicher wieder freigeben return EXIT_SUCCESS; } return EXIT_FAILURE; }