C6331
Actualización: noviembre 2007
C6331
Advertencia C6331: Parámetro no válido: no se permite pasar MEM_RELEASE y MEM_DECOMMIT junto con <función>. Esto provocará un error en la llamada
Este mensaje indica que se pasa un parámetro no válido a VirtualFree o VirtualFreeEx. VirtualFree y VirtualFreeEx rechazan los indicadores (MEM_RELEASE | MEM_DECOMMIT) en combinación. Por consiguiente, los valores MEM_DECOMMIT y MEM_RELEASE no se pueden utilizar juntos en la misma llamada.
No es imprescindible que la anulación de registro y la liberación se realicen en pasos independientes. Al liberar la memoria confirmada, también se anula el registro de las páginas. Además, asegúrese de que no se omita el valor devuelto de esta función.
Ejemplo
El siguiente ejemplo de código genera esta advertencia:
#include <windows.h>
#define PAGELIMIT 80
DWORD dwPages = 0; // count of pages
DWORD dwPageSize; // page size
VOID fd( VOID )
{
LPVOID lpvBase; // base address of the test memory
BOOL bSuccess;
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 );
if (lpvBase)
{
// code to access memory
}
else
{
return;
}
bSuccess = VirtualFree(lpvBase,
0,
MEM_DECOMMIT | MEM_RELEASE); // warning
// code...
}
Para corregir esta advertencia, no pase el valor MEM_DECOMMIT a la llamada a VirtualFree como se muestra el código siguiente:
#include <windows.h>
#define PAGELIMIT 80
DWORD dwPages = 0; // count of pages
DWORD dwPageSize; // page size
VOID f( VOID )
{
LPVOID lpvBase; // base address of the test memory
BOOL bSuccess;
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 );
if (lpvBase)
{
// code to access memory
}
else
{
return;
}
bSuccess = VirtualFree(lpvBase, 0, MEM_RELEASE);
// code...
}