C6331C6331

avertissement C6331 : paramètre non valide : passage de MEM_RELEASE et MEM_DECOMMIT en association avec <fonction > n’est pas autorisée.warning C6331: Invalid parameter: passing MEM_RELEASE and MEM_DECOMMIT in conjunction to <function> is not allowed. Cela entraîne l’échec de cet appelThis results in the failure of this call

Ce message indique qu’un paramètre non valide passé à VirtualFree ou VirtualFreeEx.This message indicates that an invalid parameter being passed to VirtualFree or VirtualFreeEx. VirtualFree et VirtualFreeEx rejettent les indicateurs (MEM_RELEASE | MEM_DECOMMIT) dans la combinaison.VirtualFree and VirtualFreeEx both reject the flags (MEM_RELEASE | MEM_DECOMMIT) in combination. Par conséquent, les valeurs MEM_DECOMMIT et MEM_RELEASE ne peuvent pas être utilisées ensemble dans le même appel.Therefore, the values MEM_DECOMMIT and MEM_RELEASE may not be used together in the same call.

Il n’est pas obligatoire pour l’annulation et de mise en production se produise en tant qu’étapes indépendantes.It is not required for decommit and release to occur as independent steps. Libération de mémoire allouée sera dégagement également les pages.Releasing committed memory will decommit the pages as well. En outre, vérifiez que la valeur de retour de cette fonction n’est pas ignorée.Also, ensure the return value of this function is not ignored.

ExempleExample

L’exemple de code suivant génère cet avertissement :The following sample code generates this warning:

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

Pour corriger cet avertissement, ne passez pas de valeur MEM_DECOMMIT à un appel VirtualFree comme indiqué dans le code suivant :To correct this warning, do not pass MEM_DECOMMIT value to VirtualFree call as shown in the following code:

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

Notez que l’utilisation de malloc et free (et les API d’allocation de mémoire dynamique connexes) ont de nombreuses pièges en termes de fuites de mémoire et des exceptions.Note that the use of malloc and free (and related dynamic memory allocation APIs) have many pitfalls in terms of memory leaks and exceptions. Pour éviter ces types de fuites et totalement de problèmes d’exception, utilisez les mécanismes fournis par la bibliothèque STL (C++ Standard Template Library).To avoid these kinds of leaks and exception problems altogether, use the mechanisms that are provided by the C++ Standard Template Library (STL). Ceux-ci incluent shared_ptr, unique_ptr, et vecteur.These include shared_ptr, unique_ptr, and vector. Pour plus d’informations, consultez pointeurs intelligents et bibliothèque Standard C++.For more information, see Smart Pointers and C++ Standard Library.

Voir aussiSee Also

VirtualAlloc, méthode VirtualAlloc Method
VirtualFree, méthodeVirtualFree Method