C6332
avertissement C6332 : Paramètre non valide : le passage de zéro comme paramètre dwFreeType vers <fonction> n'est pas autorisé.Cela provoque l'échec de cet appel.
Cet avertissement indique qu'un paramètre non valide est passé à VirtualFree ou VirtualFreeEx.VirtualFree et VirtualFreeEx refusent tous deux un paramètre dwFreeType égal à zéro.Le paramètre dwFreeType peut avoir la valeur MEM_DECOMMIT ou MEM_RELEASE.Toutefois, les valeurs MEM_DECOMMIT et MEM_RELEASE ne peuvent pas être utilisées conjointement dans le même appel.Vérifiez également que la valeur de retour de la fonction VirtualFree n'est pas ignorée.
Exemple
Le code suivant génère cet avertissement car un paramètre non valide est passé à la fonction VirtualFree :
#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 ...
}
Pour corriger cet avertissement, modifiez l'appel à la fonction VirtualFree comme indiqué dans le code suivant :
#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 ...
}
L'utilisation de VirtualAlloc et de VirtualFree présente de nombreux pièges en terme de fuites de mémoire et d'exceptions.Pour éviter complètement ce genre de problème de fuites et d'exception, utilisez les mécanismes fournis par la bibliothèque de modèles standard (STL) C++.Ceux-ci incluent shared_ptr, unique_ptr, et vector.Pour plus d’informations, consultez Pointeurs intelligents (Modern C++) et Référence de bibliothèque standard C++.