Avertissement C28197
Éventuellement fuite de mémoire
Cet avertissement est signalé pour les fuites de mémoire et de ressources lorsque la ressource est potentiellement alias vers un autre emplacement.
Le pointeur pointe vers la mémoire allouée ou vers une autre ressource allouée qui n’a pas été libérée explicitement. Cet avertissement est généralement dû à des annotations insuffisantes sur la fonction appelée, bien que les annotations insuffisantes sur la fonction appelante puissent également rendre cet avertissement plus probable.
Cet avertissement peut être signalé lors de la sortie de la fonction si un argument d’entrée a une annotation ou __drv_aliasesMem
une __drv_freesMem
annotation. Cet avertissement indique généralement une fuite valide ou qu’une fonction appelée par la fonction actuelle a besoin d’une annotation supplémentaire.
En particulier, l’absence des annotations et _Out_
de base _In_
rendent cet avertissement assez probable, bien que les annotations et __drv_freesMem
les __drv_aliasesMem
annotations puissent également être nécessaires. Un faux positif est probablement le résultat d’une annotation manquante _In_
.
Les fonctions qui prennent un pointeur et l’alias (évitant ainsi une fuite) doivent être annotées avec __drv_aliasesMem
. Si vous créez une fonction qui insère un objet dans une structure globale ou que vous la transmettez à une fonction système qui le fait, vous devez ajouter l’annotation __drv_aliasesMem
.
Fonctions qui libèrent de la mémoire doivent être annotées avec __drv_freesMem
. Les principales fonctions qui libèrent de la mémoire 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 évite cet avertissement :
char *p = (char *)malloc(10);
test(p); // does not save a copy of p
free(p);
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour