Allocation dynamique de la mémoire : fonction système
La fonction malloc
Pour réserver de la mémoire, la fonction utilisée est malloc. Cette fonction prend en paramètre la quantité de mémoire demandée en octets. Par exemple, pour réserver 200 long long dynamiquement avec malloc, on utilisera l'expression suivante :
long long *tab_dyn = malloc(sizeof(long long) * 200) ;
Remarque :
On remarque plusieurs choses en examinant cette instruction :
Nous déclarons un pointeur sur un type long long, nommé tab_dyn : on voit que la déclaration d'un pointeur vers un long long ou vers un tableau de long long est identique,
Nous affectons à ce pointeur la valeur retournée par l'appel de la fonction malloc. La valeur de retour est une adresse mémoire, si malloc réussit à réserver la mémoire, NULL sinon (par exemple, si on essaie de réserver plus de mémoire que ne peut fournir le système),
On utilise l'opérateur sizeof pour obtenir la taille en mémoire d'un long long que l'on multiplie par le nombre d'éléments à réserver. En effet, les types simples en C ont souvent une taille en mémoire différente d'un octet. Or, malloc attend la taille en octets de la zone réservée, donc le produit de la taille unitaire d'un élément, par le nombre d'éléments à stocker. La variable définissant le tableau dynamique s'utilise ensuite comme tout tableau, à l'aide de l'opérateur [ ].
Conseil :
La déclaration plus haut n'est pas tout à fait correcte. En effet, la fonction malloc fournit un résultat de type int *, ce qui ne correspond pas au type de tab_dyn. La déclaration complète sera donc :
long long *tab_dyn = (long long *) malloc(sizeof(long long) * 200) ;
Complément : Déclaration de la fonction
La fonction malloc est une fonction fournie par la bibliothèque standard du langage. Pour l'utiliser sans problème dans le passage du paramètre ou dans l'utilisation du résultat, le prototype doit être connu du compilateur. Celui-ci est disponible dans le fichier stdlib.h. On trouvera également les prototypes des fonctions d'allocation calloc et realloc ainsi que ceux de la fonction de libération free.