====== malloc() ======
malloc ist definiert in der ''[[start|stdlib]]'', die in C über ''stdlib.h'', bzw. in C++ über ''cstdlib'' eingebunden wird.
===== Funktion =====
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.
===== Signatur =====
#include
void * malloc ( size_t size );
**size**: Größe des Speicherblocks, Angabe in Bytes.
===== Bemerkungen =====
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 [[c:cast|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|free()]] wieder freigegeben werden.
===== Beispiel =====
#include
#include
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;
}
===== siehe auch =====
[[free]], [[calloc]], [[realloc]]