C6250
Aviso C6250: chamar <function> VirtualFree sem o sinalizador MEM_RELEASE pode liberar memória, mas não para descritores de endereço (VADs); resulta em perdas de espaço de endereço
Este aviso indica que uma chamada para VirtualFree sem a MEM_RELEASE sinalizador somente decommits as páginas e não libera-los.Para liberação e solte páginas, use MEM_RELEASE sinalizador na chamada para VirtualFree.Se todas as páginas na região são confirmadas, a função decommits primeiro e depois libera-los.Depois dessa operação, as páginas estão no estado livre.Se você especificar este sinalizador, dwSize deve ser zero, e lpAddress deve apontar para o endereço base retornado pela VirtualAlloc funciona quando a região foi reservada.A função falhará se uma dessas condições não for atendida.
Você pode ignorar este aviso se o seu código mais tarde libera o espaço de endereço chamando VirtualFree com o MEM_RELEASE sinalizador.
Para obter mais informações, consulte VirtualAlloc e VirtualFree.
Exemplo
O exemplo de código a seguir gera este aviso:
#include <windows.h>
#include <stdio.h>
#define PAGELIMIT 80
DWORD dwPages = 0; // count of pages
DWORD dwPageSize; // page size
VOID f( )
{
LPVOID lpvBase; // base address of the test memory
SYSTEM_INFO sSysInfo; // system information
GetSystemInfo(&sSysInfo);
dwPageSize = sSysInfo.dwPageSize;
// Reserve pages in the process's virtual address space
lpvBase = VirtualAlloc(
NULL, // system selects address
PAGELIMIT*dwPageSize, // size of allocation
MEM_RESERVE,
PAGE_NOACCESS);
//
// code to access memory
// ...
if (lpvBase != NULL)
{
if (VirtualFree( lpvBase, 0, MEM_DECOMMIT )) // decommit pages
{
puts ("MEM_DECOMMIT Succeeded");
}
else
{
puts("MEM_DECOMMIT failed");
}
}
else
{
puts("lpvBase == NULL");
}
}
Para corrigir esse aviso, use o exemplo de código a seguir:
#include <windows.h>
#include <stdio.h>
#define PAGELIMIT 80
DWORD dwPages = 0; // count of pages
DWORD dwPageSize; // page size
VOID f( )
{
LPVOID lpvBase; // base address of the test memory
SYSTEM_INFO sSysInfo; // system information
GetSystemInfo(&sSysInfo);
dwPageSize = sSysInfo.dwPageSize;
// Reserve pages in the process's virtual address space
lpvBase = VirtualAlloc(
NULL, // system selects address
PAGELIMIT*dwPageSize, // size of allocation
MEM_RESERVE,
PAGE_NOACCESS);
//
// code to access memory
// ...
if (lpvBase != NULL)
{
if (VirtualFree(lpvBase, 0,MEM_RELEASE )) // decommit & release
{
// code ...
}
else
{
puts("MEM_RELEASE failed");
}
}
else
{
puts("lpvBase == Null ");
// code...
}
}