La fonction malloc()
a ce prototype :
#include <stdlib.h> void *malloc (size_t size);
Quand vous oubliez le fichier d'en-tête stdlib.h
, le préprocesseur se plaint que malloc()
ne renvoie pas le bon type, ce qui pousse certains à utiliser un cast. Ceci est à éviter, même si cela fut nécessaire du temps des dinosaures (et peut-être même avant). Aujourd'hui, pour éviter ce genre d'insultes de la part du préprocesseur, veuillez ajouter le fichier d'en-tête que vous avez oublié et il ne vous embêtera plus à ce sujet.
La fonction malloc()
se contente d'allouer de la mémoire et de renvoyer un pointeur vers l'espace ainsi réservé. Pour éviter certaines erreurs, en particulier lorsque vous utilisez des chaînes de caractères ou tout autre structure dont le dernier élément est nul, vous pouvez aussi utiliser calloc()
qui, non contente d'effectuer le même travail que malloc()
, s'occupe de mettre à zéro tout l'espace que vous avez demandé.
Les fonctions d'allocation de mémoire renvoient un pointeur vers la zone réservée, ou NULL
si cela n'est pas possible. Il est indispensable de tester systématiquement la valeur de retour pour ne pas continuer le programme comme prévu si une erreur s'est produite lors de l'allocation de mémoire. En général, si vous ne pouvez obtenir la mémoire souhaitée, vous n'avez plus rien d'autre à faire que de clore proprement votre programme. Tout code d'allocation de mémoire doit ressembler à celui-ci si vous n'avez pas de raisons de ne pas quitter suite à une erreur d'allocation :
if (NULL == (variable = malloc (N * sizeof (*variable)))) { /* 1/ Afficher un message d'erreur * ou le mettre dans un fichier de journalisation (log) * 2/ Clore proprement * 3/ Quitter */ exit (EXIT_FAILURE); }
© 2005 Yves Mettier