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 double
oder 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_errlist
und _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
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Tickets als Feedbackmechanismus für Inhalte auslaufen lassen und es durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unter:Einreichen und Feedback anzeigen für