Avertissement C6332
Paramètre non valide : le passage de zéro comme paramètre dwFreeType à 'function' n’est pas autorisé. Cela entraîne l’échec de cet appel
Cet avertissement indique qu’un paramètre non valide est passé à VirtualFree
ou VirtualFreeEx
.
Notes
VirtualFree
et VirtualFreeEx
les deux rejettent un dwFreeType
paramètre de zéro. Le dwFreeType
paramètre peut être soit MEM_DECOMMIT
soit MEM_RELEASE
. Toutefois, les valeurs MEM_DECOMMIT
et MEM_RELEASE
ne peuvent pas être utilisées ensemble dans le même appel. Vérifiez également que la valeur de retour de la VirtualFree
fonction n’est pas ignorée.
Nom de l’analyse du code : VirtualFreeInvalidParam2
Exemple
Le code suivant génère l’avertissement C6332, car un paramètre non valide est passé à la VirtualFree
fonction :
#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 VirtualFree
fonction, 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 et présente de nombreux pièges en termes de VirtualAlloc
VirtualFree
fuites de mémoire et d’exceptions. Pour éviter ces types de fuites potentielles, utilisez les mécanismes fournis par la bibliothèque C++ Standard (STL). Ceux-ci incluent shared_ptr
, unique_ptr
et des conteneurs tels que vector
. Pour plus d’informations, consultez Les pointeurs intelligents et la bibliothèque standard C++.
Voir aussi
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour