malloc
Alloue les blocs de mémoire.
void *malloc(
size_t size
);
Paramètres
- size
Octets à allouer.
Valeur de retour
malloc retourne un pointeur void vers l'espace alloué, ou NULL si la mémoire disponible est insuffisante. Pour rétablir un pointeur sur un type autre qu'un void, utilisez un cast de type sur la valeur de retour. L'espace de stockage sur lequel pointe la valeur de retour est obligatoirement aligné pour le stockage de tout type d'objet qui a une spécification d'alignement inférieure ou égale à celui de l'alignement simple. (Dans Visual C++, l'alignement simple est l'alignement requis pour un double, ou 8 octets. Dans le code qui cible les plateformes 64 bits, il correspond à 16 octets.) Utilisez _aligned_malloc pour allouer un stockage pour les objets qui ont une plus grande spécification d'alignement (par exemple, les types de SSE __m128 et __m256, et les types qui sont déclarés à l'aide de __declspec(align(n)) où n est supérieur à 8. Si size a la valeur 0, malloc alloue un élément de longueur zéro dans le tas et retourne un pointeur valide à 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 plus grand que size octets en raison de l'espace requis pour les informations d'alignement et de maintenance.
malloc affecte à errno la valeur ENOMEM si une allocation de mémoire échoue ou si la quantité de mémoire demandée dépasse _HEAP_MAXREQ. Pour plus d'informations sur ces codes de retour et autres, consultez errno, _doserrno, _sys_errlist et _sys_nerr.
Le code de démarrage utilise malloc pour allouer un stockage pour les variables _environ, envp et argv. Les fonctions suivantes et leurs équivalents à caractère élargi 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 de échec, malloc doit appeler la nouvelle routine du gestionnaire comme définit par _set_new_handler. Par défaut, malloc n'appelle pas la nouvelle routine de gestionnaire en cas de défaillance pour allouer de la mémoire. Vous pouvez substituer ce comportement par défaut afin que, lorsque malloc ne réussit pas à allouer la mémoire, malloc appelle la nouvelle routine de gestionnaire de la même manière que l'opérateur new lorsqu'il échoue pour la même raison. Pour substituer la valeur par défaut, appelez
_set_new_mode(1)
tôt dans votre programme, ou créez un lien avec NEWMODE.OBJ (consultez Options de lien).
Lorsque l'application est liée à une version debug des bibliothèques Runtime C, malloc est résolu en _malloc_dbg. Pour plus d'informations sur la gestion du tas pendant le processus de débogage, consultez Détails du tas de débogage CRT.
malloc est marqué __declspec(noalias) et __declspec(restrict) ; cela signifie que la fonction n'est pas garantie pour modifier les variables globales, et que le pointeur retourné n'est pas un alias. Pour plus d’informations, consultez noalias et restrict.
Configuration requise
Routine |
En-tête requis |
---|---|
malloc |
<stdlib.h> et <malloc.h> |
Pour plus d'informations sur la compatibilité, consultez Compatibilité.
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" );
}
}
Équivalent .NET Framework
Non applicable. Pour appeler la fonction C standard, utilisez PInvoke. Pour plus d'informations, consultez Exemples d'appel de code non managé.