Freigeben über


malloc

Weist Speicherblöcke zu.

void *malloc(
   size_t size 
);

Parameter

  • size
    Zuzuordnende Bytes.

Rückgabewert

malloc gibt einen void-Zeiger auf den zugeordneten Speicherplatz oder NULL zurück, wenn nicht genügend Speicher verfügbar ist. Um einen Zeiger auf einen anderen Typ als void zurückzugeben, verwenden Sie eine Typumwandlung für den Rückgabewert. Es ist sichergestellt, dass der Speicherplatz, auf den der Rückgabewert zeigt, passend für einen Speicher von einem beliebigen Objekttyp ist, dessen Ausrichtungsanforderungen kleiner oder gleich der grundlegenden Ausrichtung sind. (In Visual C++ ist die grundlegende Ausrichtung die Ausrichtung, die für double oder 8 Bytes erforderlich ist. In einem Code, der auf 64-Bit-Plattformen ausgerichtet ist, sind es 16 Bytes.) Verwenden Sie _aligned_malloc, um Speicher für Objekte mit höheren Ausrichtungsanforderungen zuzuordnen, beispielsweise die SSE-Typen __m128 und __m256 und Typen, die durch das Verwenden von __declspec(align(n)) deklariert werden, wobei n größer ist als 8. 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 errno, _doserrno, _sys_errlist und _sys_nerr.

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.

calloc

fscanf

_getw

setvbuf

_exec-Funktionen

fseek

_popen

_spawn-Funktionen

fgetc

fsetpos

printf

_strdup

_fgetchar

_fullpath

putc

system

fgets

fwrite

putchar

_tempnam

fprintf

getc

_putenv

ungetc

fputc

getchar

puts

vfprintf

_fputchar

_getcwd

_putw

vprintf

fputs

_getdcwd

scanf

 

fread

gets

_searchenv

 

Die _set_new_mode-Funktion von C++ legt den neuen Handlermodus für malloc fest. Der neue Handlermodus gibt an, ob bei einem Fehler malloc die neue Handlerroutine aufgerufen werden soll, wie dies von _set_new_handler festgelegt ist. Standardmäßig ruft malloc bei einem Speicherbelegungsfehler nicht die neue Handlerroutine auf. 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 den Standardwert zu überschreiben, rufen Sie

_set_new_mode(1)

rechtzeitig im Programm auf oder stellen eine Verknüpfung mit NEWMODE.OBJ (siehe Linkoptionen) her.

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

malloc ist als __declspec(noalias) und __declspec(restrict) gekennzeichnet, das bedeutet, dass die Funktion globale Variablen definitiv nicht ändert und dass der zurückgegebene Zeiger keinen Alias hat. Weitere Informationen finden Sie unter noalias und restrict.

Anforderungen

Routine

Erforderlicher Header

malloc

<stdlib.h> und <malloc.h>

Zusätzliche Informationen zur Kompatibilität finden Sie unter Kompatibilität.

Bibliotheken

Alle Versionen 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" );
   }
}
  

.NET Framework-Entsprechung

Nicht zutreffend. Mit PInvoke rufen Sie die Standard-C-Funktion auf. Weitere Informationen finden Sie unter Beispiele für Plattformaufrufe.

Siehe auch

Referenz

Speicherbelegung

calloc

Frei

realloc

_aligned_malloc