Partager via


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 doubleou 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 __m256les 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_doserrnoet _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

Voir aussi

Allocation de mémoire
calloc
free
realloc
_aligned_malloc