Partager via


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

Voir aussi

Référence

IHostMemoryManager::VirtualAlloc, méthode

IHostMemoryManager::VirtualFree, méthode