C28197C28197

Advertencia C28197: Posible pérdida de memoriaWarning C28197: Possibly leaking memory

Esta advertencia se muestra para las pérdidas de memoria y recursos de cuando el recurso es potencialmente un alias a otra ubicación.This warning is reported for both memory and resource leaks when the resource is potentially aliased to another location.

El puntero apunta a la memoria asignada o a otro asigna recursos que no se han liberado explícitamente.The pointer points to allocated memory or to another allocated resource that was not explicitly freed. Esta advertencia suele deberse a las anotaciones inadecuadas en la función llamada, aunque las anotaciones inadecuadas en la función de llamada pueden hacer esto más 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.

Esta advertencia se puede notificar al salir de la función si un argumento de entrada tiene un __drv_freesMem o __drv_aliasesMem anotación.This warning can be reported on function exit if an input argument has a __drv_freesMem or __drv_aliasesMem annotation. Esta advertencia suele indica una pérdida de válida o que una función llama a la función actual necesita anotaciones adicionales.This warning typically indicates either a valid leak or that a function called by the current function needs additional annotation.

En particular, la ausencia de las opciones básicas _In_ y _Out_ anotaciones hacen esta advertencia bastante probable, aunque la __drv_aliasesMem y __drv_freesMem podrían ser necesarios también anotaciones.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 falso positivo es el resultado probable de una falta _In_ anotación.A false positive is a likely result of a missing _In_ annotation.

Las funciones que toman un puntero y el alias se (lo que evita una pérdida) se deben anotar con __drv_aliasesMem.Functions that take a pointer and alias it (thus avoiding a leak) should be annotated with __drv_aliasesMem. Si crea una función que inserta un objeto en una estructura global o pasa a una función del sistema que hace eso, debe agregar el __drv_aliasesMem anotación.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.

Las funciones que liberan memoria se deben anotar con __drv_freesMem.Functions that free memory should be annotated with __drv_freesMem. Las funciones principales que liberar memoria ya tienen esta anotación.The major functions that free memory already have this annotation.

EjemploExample

El siguiente código de ejemplo genera esta advertencia:The following code example generates this warning:

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

El siguiente código de ejemplo evita esta advertencia:The following code example avoids this warning:

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