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