C28197C28197

Aviso C28197: Possivelmente com vazamento de memóriaWarning C28197: Possibly leaking memory

Esse aviso é relatado para os vazamentos de memória e recursos de quando o recurso é potencialmente um alias para outro local.This warning is reported for both memory and resource leaks when the resource is potentially aliased to another location.

O ponteiro pontos a memória alocada, ou para outro alocado recursos que não foi explicitamente liberado.The pointer points to allocated memory or to another allocated resource that was not explicitly freed. Esse aviso costuma ocorrer devido a inadequado anotações na função chamada, embora inadequadas anotações na função de chamada também podem fazer isso mais provável.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.

Esse aviso pode ser informado na saída da função, se um argumento de entrada tem um __drv_freesMem ou __drv_aliasesMem anotação.This warning can be reported on function exit if an input argument has a __drv_freesMem or __drv_aliasesMem annotation. Esse aviso geralmente indica um vazamento de válido ou que uma função chamada pela função atual precisa anotação adicional.This warning typically indicates either a valid leak or that a function called by the current function needs additional annotation.

Em particular, a ausência de básica _In_ e _Out_ anotações tornar esse aviso bastante provável, embora o __drv_aliasesMem e __drv_freesMem anotações podem ser necessário também.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. Um falso positivo é um resultado de uma falta _In_ anotação.A false positive is a likely result of a missing _In_ annotation.

Funções que usam um ponteiro e um alias-(evitando um vazamento) deve ser anotada com __drv_aliasesMem.Functions that take a pointer and alias it (thus avoiding a leak) should be annotated with __drv_aliasesMem. Se você criar uma função que insere um objeto em uma estrutura global ou passá-lo para uma função de sistema que faz isso, você deve adicionar o __drv_aliasesMem anotação.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.

Funções que liberar memória devem ser anotadas com __drv_freesMem.Functions that free memory should be annotated with __drv_freesMem. As funções principais que liberar a memória já tem esta anotação.The major functions that free memory already have this annotation.

ExemploExample

O exemplo de código a seguir gera este aviso:The following code example generates this warning:

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

O exemplo de código a seguir evita este aviso:The following code example avoids this warning:

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