C28197
Advertencia C28197: Memoria con posibles pérdidas
Esta advertencia se muestra por las pérdidas de memoria y recursos cuando se tiene el recurso potencialmente asignado a otra ubicación.
El puntero apunta a memoria asignada o a otro recurso asignado que no se ha liberado.Esta advertencia suele deberse a las anotaciones inadecuadas en la función llamada, aunque es probable que también las anotaciones inadecuadas en la función llamante puedan crear esta situación.
Esta advertencia se puede notificar en el resultado de la función si un argumento de entrada tiene una anotación de __drv_freesMem o de __drv_aliasesMem.Esta advertencia indica normalmente un escape válido o que una función denominada por la función actual necesita la anotación adicional.
En particular, la ausencia del _In_ básico y las anotaciones _Out_ muy probablemente originen esta advertencia, aunque las anotaciones __drv_aliasesMem y __drv_freesMem se pueden necesitar también.Un falso positivo es un resultado probable de una anotación que carece de _In_.
Las funciones que toman un puntero y un alias (evitando así un escape) deben ser anotadas con __drv_aliasesMem.Si se crea una función que inserta un objeto en una estructura global, o la pasa a una función de sistema que haga esto, debe agregar anotaciones de __drv_aliasesMem.
Las funciones que liberen memoria se deben anotar con __drv_freesMem.Las funciones principales que liberan memoria ya tienen esta anotación.
Ejemplo
El siguiente ejemplo de código genera la advertencia:
char *p = (char *)malloc(10);
test(p); // does not save a copy of p
El siguiente ejemplo de código evita la advertencia:
char *p = (char *)malloc(10);
test(p); // does not save a copy of p
free(p);