Advertencia C28197

Posiblemente la pérdida de memoria

Esta advertencia se notifica tanto para fugas de memoria como de recursos cuando se aplica un alias al recurso en otra ubicación.

El puntero apunta a la memoria asignada o a otro recurso asignado que no se liberó explícitamente. Esta advertencia suele deberse a anotaciones inadecuadas en la función llamada, aunque las anotaciones inadecuadas en la función de llamada también pueden hacer que esta advertencia sea más probable.

Esta advertencia se puede notificar en la salida de la función si un argumento de entrada tiene una anotación __drv_freesMem o __drv_aliasesMem. Esta advertencia suele indicar una pérdida válida o que una función llamada por la función actual necesita más anotación.

En concreto, la ausencia de las anotaciones básicas _In_ y _Out_ hace que esta advertencia sea bastante probable, aunque también podrían ser necesarias anotaciones __drv_aliasesMem y __drv_freesMem. Un falso positivo es un resultado probable de una anotación _In_ que falta.

Las funciones que toman un puntero y crean un alias para él (evitando así una fuga) deben anotarse con __drv_aliasesMem. Si crea una función que inserta un objeto en una estructura global o la pasa a una función del sistema que lo hace, debe agregar la anotación __drv_aliasesMem.

Las funciones que liberan memoria deben anotarse con __drv_freesMem. Las funciones principales que liberan memoria ya tienen esta anotación.

Ejemplo

El siguiente código de ejemplo genera esta advertencia:

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

El siguiente código de ejemplo evita esta advertencia:

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