====== 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]]