C28197
Avertissement C28197 : Fuite possible de la mémoire
Cet avertissement est enregistré pour les fuites de mémoire et de ressource lorsque la ressource est un alias possible vers un autre emplacement.
Le pointeur pointe sur la mémoire allouée ou une autre ressource allouée qui n'a pas été libérée explicitement.Cet avertissement est généralement dû à des annotations inadéquates sur la fonction appelée, bien que les annotations inadéquates la fonction appellante puissent également le faire.
Cet avertissement peut être reporté sur la fonction de sortie si un argument d'entrée a une annotation __drv_freesMem ou __drv_aliasesMem .Cet avertissement indique généralement soit une fuite valide ou qu'une fonction appelée par la fonction en cours a besoin d'annotation supplémentaire.
En particulier, l'absence de _In_ de base et des annotations _Out_ font fort probablement cet avertissement, bien que les annotations __drv_aliasesMem et __drv_freesMem peuvent également être nécessaire.Un faux positifs est un résultat probable d'une absence d'annotation _In_ .
Les fonctions qui acceptent un pointeur et alias il (ainsi évitant une fuite) doivent être annoté avec __drv_aliasesMem.Si vous créez une fonction qui insère un objet dans une structure globale, ou le passe à une fonction système qui le fait, vous devez ajouter l'annotation __drv_aliasesMem .
Les fonctions qui libèrent la mémoire doivent être annotée avec __drv_freesMem.Les fonctions principales qui libèrent la mémoire disponible ont déjà cette annotation.
Exemple
L'exemple de code suivant génère cet avertissement :
char *p = (char *)malloc(10);
test(p); // does not save a copy of p
L'exemple de code suivant permet d'éviter cet avertissement :
char *p = (char *)malloc(10);
test(p); // does not save a copy of p
free(p);