Share via


malloc

Belegt Speicher blockiert.

void *malloc(
   size_t size 
);

Parameter

  • size
    Zuzuordnen Bytes.

Rückgabewert

malloc gibt einen void-Zeiger auf den reservierten Speicherplatz oder NULL zurück, wenn es nicht genügend Arbeitsspeicher vorhanden sind.Um einen Zeiger auf einen anderen Typ als voidzurückzugeben, verwenden Sie eine Typumwandlung im Rückgabewert.Der Speicherplatz, der durch den Rückgabewert verweist, ist für Speicher entsprechend Objekt eines beliebigen Typs ausgerichtet werden soll.Wenn Größe 0 (null) ist, wird die Länge 0 malloc ein Element 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 Arbeitsspeicher klein ist.

Hinweise

Die malloc-Funktion ordnet einen Speicherblock mindestens size Bytes.Der Block ist möglicherweise größer als size aufgrund von Bytes Speicherplatz, das Ausrichtungs- und Verwalten von Informationen erforderlich ist.

malloc legt diesen fest ENOMEM zu errno , wenn eine Speicherbelegung fehlschlägt, oder wenn der angeforderte Arbeitsspeicher _HEAP_MAXREQüberschreitet.Weitere Informationen zu diesem und anderen Fehlercodes finden Sie unter errno, _doserrno, _sys_errlist und _sys_nerr.

Der Startcode verwendet malloc , um Speicher für _environ, envpund argv-Variablen zuzuordnen.Die folgenden Features und ihre Entsprechungen rufen auch mallocBreitzeichen dargestellt:

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

setzt sich

vfprintf

_fputchar

_getcwd

_putw

vprintf

fputs

_getdcwd

scanf

 

fread

ruft ab

_searchenv

 

Die Funktion C++ _set_new_mode legt den neuen Handler für mallocModus fest.Der neue Modus gibt an, ob die Handler auf Fehler, malloc , die neue Handler routine legen Sie z. B. durch _set_new_handleraufzurufen ist.Standardmäßig ruft malloc nicht die neuen Handler routine bei Bindungsfehlern Speicher belegen.Sie können dieses Standardverhalten überschreiben, dass beim malloc Speicher belegen, kann nicht malloc die neue Handler routine genauso aufgerufen wird, dass der Operator new , wenn sie aus demselben Grund fehlschlägt.Um den Standardwert überschreiben, rufen

_set_new_mode(1)

früh im Programm oder eine Verknüpfung mit NEWMODE.OBJ (siehe Link-Optionen).

Wenn die Anwendung mit einer Debugversion der C-Laufzeitbibliotheken verknüpft ist, wird malloc zu _malloc_dbgauf.Weitere Informationen darüber, wie der Heap während des Debuggens Prozesses verwaltet wird, finden Sie unter Der CRT-Debugheap.

malloc ist als __declspec(noalias) und __declspec(restrict)und bedeutet, dass die Funktion nicht garantiert globale Variablen ändern und dass der zurückgegebene Zeiger nicht mit einem Alias versehene.Weitere Informationen finden Sie unter noalias und Beschränken Sie ein.

Anforderungen

Routine

Erforderlicher Header

malloc

<stdlib.h> und <malloc.h>

Um Kompatibilität zusätzlichen Informationen finden Sie unter Kompatibilität in der Einführung.

Bibliotheken

Alle Versionen Cs.

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. Um die Standard-C-Funktion aufrufen, verwenden Sie PInvoke. Weitere Informationen finden Sie unter Plattformaufruf-Beispiele.

Siehe auch

Referenz

Speicherbelegung

calloc

Frei

realloc