malloc

Weist Speicherblöcke zu.

Syntax

void *malloc(
   size_t size
);

Parameter

size
Zuzuordnende Bytes.

Rückgabewert

malloc gibt einen leeren Zeiger auf den zugewiesenen Speicherplatz zurück, oder NULL wenn nicht genügend Arbeitsspeicher verfügbar ist. Um einen Zeiger auf einen anderen Typ als void zurückzugeben, verwenden Sie eine Typumwandlung für den Rückgabewert. Der speicherplatz, auf den der Rückgabewert verweist, wird entsprechend für die Speicherung eines Objekttyps ausgerichtet, der eine Ausrichtungsanforderung aufweist, die kleiner oder gleich der der grundlegenden Ausrichtung ist. (In Visual C++ ist die grundlegende Ausrichtung die Ausrichtung, die für ein doubleoder 8 Byte erforderlich ist. Im Code, der auf 64-Bit-Plattformen ausgerichtet ist, beträgt er 16 Bytes.) Wird verwendet, um Speicher für Objekte zuzuweisen, die eine größere Ausrichtungsanforderung aufweisen, z. _aligned_malloc B. die SSE-Typen und __m256-Typen__m128, die mithilfe von __declspec(align( n )) "wheren" größer als 8 deklariert werden. Wenn size 0 ist, weist malloc ein Element der Länge 0 im Heap zu und gibt einen gültigen Zeiger auf dieses Element zurück. Überprüfen Sie immer die Rückgabe von malloc, auch wenn der angeforderte Speicherplatz klein ist.

Hinweise

Die malloc-Funktion weist einen Speicherblock von mindestens size Bytes zu. Der Block kann aufgrund des Platzes, der für die Ausrichtung und die Wartungsinformationen benötigt wird, größer sein als size Bytes.

malloc setzt errno auf ENOMEM, wenn eine Speicherbelegung fehlschlägt oder wenn der benötigte Speicherplatz größer ist als _HEAP_MAXREQ. Informationen zu diesem und anderen Fehlercodes finden Sie unter , , _doserrno, _sys_errlistund _sys_nerr.errno

Der Startcode verwendet malloc, um Speicher für die _environ-, envp- und argv-Variablen zuzuordnen. Die folgenden Funktionen und ihre Breitzeichenentsprechungen rufen auch malloc auf.

Die C++ _set_new_mode -Funktion legt den neuen Handlermodus für malloc. Der neue Handlermodus gibt an, ob bei einem Fehler malloc die neue Handlerroutine aufrufen soll, wie dies von _set_new_handler festgelegt ist. Ruft standardmäßig die neue Handlerroutine nicht auf, malloc wenn Speicher nicht zugewiesen werden kann. Sie können dieses Standardverhalten überschreiben, sodass, wenn malloc Speicher nicht belegen kann,malloc die neue Handlerroutine genauso aufruft wie der new-Operator, wenn dieser aus demselben Grund fehlschlägt. Um die Standardeinstellung außer Kraft zu setzen, rufen Sie _set_new_mode(1) frühzeitig in Ihrem Programm auf oder verknüpfen Sie NEWMODE.OBJ ihn (siehe Linkoptionen).

Wenn die Anwendung mit einer Debugversion der C-Laufzeitbibliotheken verknüpft ist, malloc wird sie aufgelöst._malloc_dbg Weitere Informationen dazu, wie der Heap während des Debuggingvorgangs verwaltet wird, finden Sie unter CRT Debug Heap Details.

malloc ist markiert __declspec(noalias) und __declspec(restrict). Diese Attribute bedeuten, dass die Funktion garantiert keine globalen Variablen ändert und dass der zurückgegebene Zeiger nicht als Alias gekennzeichnet ist. Weitere Informationen finden Sie unter noalias und restrict.

Standardmäßig gilt der globale Zustand dieser Funktion für die Anwendung. Wie Sie dieses Verhalten ändern, erfahren Sie unter Globaler Status in der CRT.

Anforderungen

Routine Erforderlicher Header
malloc <stdlib.h> und <malloc.h>

Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.

Libraries

Alle Versionen der C-Laufzeitbibliotheken.

Beispiel

// crt_malloc.c
// This program allocates memory with
// malloc, then frees the memory with free.

#include <stdlib.h>   // For _MAX_PATH definition
#include <stdio.h>
#include <malloc.h>

int main( void )
{
   char *string;

   // Allocate space for a path name
   string = malloc( _MAX_PATH );

   // In a C++ file, explicitly cast malloc's return.  For example,
   // string = (char *)malloc( _MAX_PATH );

   if( string == NULL )
      printf( "Insufficient memory available\n" );
   else
   {
      printf( "Memory space allocated for path name\n" );
      free( string );
      printf( "Memory freed\n" );
   }
}
Memory space allocated for path name
Memory freed

Siehe auch

Speicherzuweisung
calloc
free
realloc
_aligned_malloc