monchecker.sh : mon programme qui m'aide à vérifier les allocations mémoires dans un programme C. Ce programme aide juste à repérer rapidement dans un ou plusieurs fichiers source C les mots clefs ayant un rapport avec les fautes d'allocation mémoire. Le programme effectue une recherche dans tous les fichiers passés en argument des chaines de caractères suivantes : o char * o char* o malloc o strcat o strcpy o sprintf o gets Chaque ligne trouvée est triée par ordre alphabétique, puis, si il existe plusieurs lignes équivalentes, seule l'une d'elles est gardée. Le numéro de la ligne dans le fichier source est affiché en début. Il reste ensuite à véfifier dans le programme source que chaque pointeur n'ayant aucune allocation mémoire fonctionne. On peut aussi v\xe9rifier qu'il n'y a pas de d\xe9bordement de chaine de caract\xe8res lors de l'appel des fonctions strcat, strcpy. Ma façon à moi que j'ai pour faire \xe7a, c'est d'imprimer le r\xe9sultat monchecker.sh toto.c | lpr de surligner d'une couleur tous les ``char *'' et d'une autre tous les ``malloc''. Ainsi, j'ai en un coup d'oeil la liste de tous les pointeurs déclarés, et la liste de tous les pointeurs n'ayant aucune allocation mémoire. Vérifier que un pointeur est utilisé sans aucune allocation m\xe9moire est alors un jeu d'enfant. Pour vérifier les ``strcat'' et ``strcpy'', du fait qu'ils sont classés par ordre alphabétique, j'ai tout de suite la liste de tous les appels à la fonction traitant du même pointeur, par exemple : 384: strcat (Nom_Corps_Article, Home); 385: strcat (Nom_Corps_Article, "/news_tmp.XXXXXX"); Je n'ai plus qu'à vérifier dans le fichier source que la taille de ``Home'' plus la taille de ``"/news_tmp.XXXXXX"'' ne sera jamais supérieure à la taille de ``Nom_Corps_Article'', ou de v\xe9rifier si il y a un test pour cela. Enfin, si les fonctions sprintf() et gets() sont utilisées, elles sont indiquées. Ces fonctions sont dangeureuses, car aucune vérification de débordement n'est effectuée. Il faut mieux utiliser respectivement asprintf() et fgets(). Tout ça parce que checker n'est pas répandu ! J'aurai quand même aimé qu'il le soit, je suis sûr qu'il fait plus de choses... M'enfin, quand on apprend à programmer, il faut bien un garde-fou, aussi modeste soit-il, c'est toujours ça !