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);
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de