Compartir a través de


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...
}

Vea también

Referencia

IHostMemoryManager::VirtualAlloc (Método)

IHostMemoryManager::VirtualFree (Método)