Namespaces
Variants

malloc

From cppreference.net
Défini dans l'en-tête <stdlib.h>
void * malloc ( size_t size ) ;

Alloue size octets de stockage non initialisé.

Si l'allocation réussit, retourne un pointeur aligné de manière appropriée pour tout type d'objet ayant un alignement fondamental .

Si size est zéro, le comportement de malloc est défini par l'implémentation. Par exemple, un pointeur nul peut être retourné. Alternativement, un pointeur non nul peut être retourné ; mais un tel pointeur ne doit pas être déréférencé , et doit être passé à free pour éviter les fuites de mémoire.

malloc est thread-safe : il se comporte comme s'il n'accédait qu'aux emplacements mémoire visibles via son argument, et non à un stockage statique.

Un appel précédent à free , free_sized , et free_aligned_sized (depuis C23) ou realloc qui désalloue une région de mémoire synchronise-avec un appel à malloc qui alloue la même région de mémoire ou une partie de celle-ci. Cette synchronisation se produit après tout accès à la mémoire par la fonction de désallocation et avant tout accès à la mémoire par malloc . Il existe un ordre total unique pour toutes les fonctions d'allocation et de désallocation opérant sur chaque région de mémoire particulière.

(depuis C11)

Table des matières

Paramètres

size - nombre d'octets à allouer

Valeur de retour

En cas de succès, retourne le pointeur vers le début de la mémoire nouvellement allouée. Pour éviter une fuite de mémoire, le pointeur retourné doit être désalloué avec free() ou realloc() .

En cas d'échec, retourne un pointeur nul.

Exemple

#include <stdio.h>   
#include <stdlib.h> 
int main(void) 
{
    int *p1 = malloc(4*sizeof(int));  // alloue suffisamment pour un tableau de 4 int
    int *p2 = malloc(sizeof(int[4])); // idem, en nommant directement le type
    int *p3 = malloc(4*sizeof *p3);   // idem, sans répéter le nom du type
    if(p1) {
        for(int n=0; n<4; ++n) // peuple le tableau
            p1[n] = n*n;
        for(int n=0; n<4; ++n) // l'affiche
            printf("p1[%d] == %d\n", n, p1[n]);
    }
    free(p1);
    free(p2);
    free(p3);
}

Sortie :

p1[0] == 0
p1[1] == 1
p1[2] == 4
p1[3] == 9

Références

  • Norme C17 (ISO/CEI 9899:2018) :
  • 7.22.3.4 La fonction malloc (p. 254)
  • Norme C11 (ISO/CEI 9899:2011) :
  • 7.22.3.4 La fonction malloc (p: 349)
  • Norme C99 (ISO/IEC 9899:1999) :
  • 7.20.3.3 La fonction malloc (p: 314)
  • Norme C89/C90 (ISO/IEC 9899:1990) :
  • 4.10.3.3 La fonction malloc

Voir aussi

désalloue la mémoire précédemment allouée
(fonction)