Condividi tramite


C6332

avviso C6332: Parametro non valido: il passaggio di zero come parametro dwFreeType a <funzione> non è consentito. Questa chiamata non riuscirà

L'avviso indica che un parametro non valido è stato passato a VirtualFree o VirtualFreeEx. VirtualFree e VirtualFreeEx respingono un parametro dwFreeType con valore zero. Il parametro dwFreeType può essere MEM_DECOMMIT o MEM_RELEASE, tuttavia non è possibile utilizzare insieme i valori MEM_DECOMMIT e MEM_RELEASE nella stessa chiamata. Accertarsi anche che il valore restituito della funzione VirtualFree non venga ignorato.

Esempio

Il codice seguente genera questo avviso perché alla funzione VirtualFree viene passato un parametro non valido:

#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, 0 ); 
  // code ...
}

Per risolvere il problema, modificare la chiamata alla funzione VirtualFree come indicato nel codice seguente:

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

Vedere anche

Riferimenti

IHostMemoryManager::VirtualAlloc Method

IHostMemoryManager::VirtualFree Method