C28197C28197

Avertissement C28197 : Éventuellement une fuite de mémoireWarning C28197: Possibly leaking memory

Cet avertissement est émis de fuites de mémoire et de ressources lors de la ressource est potentiellement un alias vers un autre emplacement.This warning is reported for both memory and resource leaks when the resource is potentially aliased to another location.

Le pointeur pointe vers la mémoire allouée ou à un autre allouée de ressource qui n’a pas été libérée explicitement.The pointer points to allocated memory or to another allocated resource that was not explicitly freed. Cet avertissement est généralement en raison d’annotations inadéquates sur la fonction appelée, bien que les annotations inadéquates sur la fonction d’appel peuvent également rendre cette plus probable.This warning is usually due to inadequate annotations on the called function, although inadequate annotations on the calling function can also make this more likely.

Cet avertissement peut être signalé dans la sortie de la fonction si un argument d’entrée a un __drv_freesMem ou __drv_aliasesMem annotation.This warning can be reported on function exit if an input argument has a __drv_freesMem or __drv_aliasesMem annotation. Cet avertissement indique généralement une fuite de soit valide ou qu’une fonction appelée par la fonction active a besoin d’annotation supplémentaire.This warning typically indicates either a valid leak or that a function called by the current function needs additional annotation.

En particulier, l’absence de base _In_ et _Out_ annotations rendent cet avertissement assez probable, bien que le __drv_aliasesMem et __drv_freesMem annotations peuvent également être nécessaire.In particular, the absence of the basic _In_ and _Out_ annotations make this warning fairly likely, although the __drv_aliasesMem and __drv_freesMem annotations might be needed as well. Un faux positif résulte probablement d’absence d’un _In_ annotation.A false positive is a likely result of a missing _In_ annotation.

Fonctions qui acceptent un pointeur et un alias elle (ce qui évite une fuite) doit être annotée avec __drv_aliasesMem.Functions that take a pointer and alias it (thus avoiding a leak) should be annotated with __drv_aliasesMem. Si vous créez une fonction qui insère un objet dans une structure globale, ou passe à une fonction système qui effectue cette opération, vous devez ajouter le __drv_aliasesMem annotation.If you create a function that inserts an object into a global structure, or passes it to a system function that does that, you should add the __drv_aliasesMem annotation.

Les fonctions qui libérer de la mémoire doivent être annotées avec __drv_freesMem.Functions that free memory should be annotated with __drv_freesMem. Les fonctions principales libérer de la mémoire déjà ont cette annotation.The major functions that free memory already have this annotation.

ExempleExample

L'exemple de code suivant génère cet avertissement :The following code example generates this warning:

char *p = (char *)malloc(10);  
test(p);   // does not save a copy of p  

L'exemple de code suivant évite cet avertissement :The following code example avoids this warning:

char *p = (char *)malloc(10);  
test(p);   // does not save a copy of p  
free(p);