Partager via


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.

calloc

fscanf

_getw

setvbuf

fonctions de _exec

fseek

_popen

fonctions de _spawn

fgetc

fsetpos

printf

_strdup

_fgetchar

_fullpath

putc

système

fgets

fwrite

putchar

_tempnam

fprintf

getc

_putenv

ungetc

fputc

getchar

puts

vfprintf

_fputchar

_getcwd

_putw

vprintf

fputs

_getdcwd

scanf

 

fread

obtient

_searchenv

 

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é.

Voir aussi

Référence

Allocation de mémoire

calloc

libre

realloc

_aligned_malloc