malloc
Alloue des blocs de mémoire.
Syntaxe
void *malloc(
size_t size
);
Paramètres
size
Octets à allouer.
Valeur retournée
malloc
retourne un pointeur void vers l’espace alloué ou NULL
s’il n’y a pas de mémoire disponible. Pour retourner un pointeur désignant un type autre que void
, utilisez un cast de type sur la valeur de retour. L’espace de stockage vers lequel pointe la valeur de retour est correctement aligné pour le stockage d’un type d’objet ayant une exigence d’alignement inférieure ou égale à celle de l’alignement fondamental. (Dans Visual C++, l’alignement fondamental est l’alignement requis pour un double
ou 8 octets. Dans le code qui cible les plateformes 64 bits, il s’agit de 16 octets.) Permet _aligned_malloc
d’allouer le stockage pour les objets qui ont une exigence d’alignement plus grande( par exemple, les types __m128
SSE et __m256
les types déclarés à l’aide de l’emplacement __declspec(align( n ))
n
où est supérieur à 8. Si size
a la valeur 0, malloc
alloue un élément de longueur nulle dans le tas et retourne un pointeur valide vers cet élément. Vérifiez toujours le retour de malloc
, même si la quantité de mémoire demandée est faible.
Notes
La fonction malloc
alloue un bloc de mémoire d’au moins size
octets. Le bloc peut être supérieur à size
octets, en raison de l’espace nécessaire aux informations d’alignement et de gestion.
malloc
définit errno
sur ENOMEM
si une allocation de mémoire échoue ou que la quantité de mémoire demandée dépasse _HEAP_MAXREQ
. Pour plus d’informations sur ce code et d’autres codes d’erreur, consultez , , _sys_errlist
_doserrno
et _sys_nerr
.errno
Le code de démarrage utilise malloc
pour allouer le stockage pour les variables _environ
, envp
et argv
. Les fonctions suivantes et leurs équivalents à caractères larges appellent également malloc
.
La fonction C++ _set_new_mode
définit le nouveau mode de gestionnaire pour malloc
. Le nouveau mode de gestionnaire indique si, en cas d'échec, malloc
doit appeler la nouvelle routine de gestionnaire, telle qu'elle est définie par _set_new_handler
. Par défaut, malloc
n’appelle pas la nouvelle routine de gestionnaire en cas d’échec de l’allocation de mémoire. Vous pouvez remplacer ce comportement par défaut de sorte que, quand _malloc
ne parvient pas à allouer de la mémoire, malloc
appelle la routine de nouveau gestionnaire de la même façon que l’opérateur new
quand il échoue pour la même raison. Pour remplacer la valeur par défaut, appelez _set_new_mode(1)
tôt dans votre programme ou liez-le NEWMODE.OBJ
(consultez les options de lien).
Lorsque l’application est liée à une version de débogage des bibliothèques runtime C, malloc
la résolution est _malloc_dbg
. Pour plus d’informations sur la gestion du tas pendant le processus de débogage, consultez les détails du tas de débogage CRT.
malloc
est marqué __declspec(noalias)
et __declspec(restrict)
. Ces attributs signifient que la fonction n’est pas garantie de ne pas modifier les variables globales et que le pointeur retourné n’est pas alias. Pour plus d’informations, consultez noalias
et restrict
.
Par défaut, l’état global de cette fonction est limité à l’application. Pour modifier ce comportement, consultez État global dans le CRT.
Spécifications
Routine | En-tête requis |
---|---|
malloc |
<stdlib.h> et <malloc.h> |
Pour plus d’informations sur la compatibilité, consultez Compatibility.
Bibliothèques
Toutes les versions des bibliothèques Runtime C.
Exemple
// 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