Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Geçersiz parametre: MEM_RELEASE ve MEM_DECOMMIT ile birlikte geçirilmesine
functionizin verilmez. Bu, bu çağrının başarısızlığına neden olur
Açıklamalar
Bu ileti, veya VirtualFreeöğesine VirtualFreeEx geçersiz bir parametre geçirildiğini gösterir.
VirtualFree ve VirtualFreeEx her ikisi de () bayraklarınıMEM_RELEASE | MEM_DECOMMIT birlikte reddeder. Bu nedenle ve değerleri MEM_DECOMMITMEM_RELEASE aynı çağrıda birlikte kullanılamayabilir.
Bağımsız adımlar olarak decommit ve release için gerekli değildir. Kaydedilmiş belleğin serbest bırakılması sayfaları da kullanımdan kaldıracaktır. Ayrıca, bu işlevin dönüş değerinin yoksayılmış olmadığından emin olun.
Kod analizi adı: VirtualFreeInvalidParam1
Örnek
Aşağıdaki örnek kod C6331 uyarısını oluşturur:
#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...
}
Bu uyarıyı MEM_DECOMMIT düzeltmek için aşağıdaki kodda gösterildiği gibi çağrısına geçmeyinVirtualFree:
#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...
}
ve malloc (ve ilgili dinamik bellek ayırma API'lerinin) kullanımında free bellek sızıntıları ve özel durumlar açısından birçok tuzak vardır. Bu tür olası sızıntıları tamamen önlemek için C++ Standart Kitaplığı (STL) tarafından sağlanan mekanizmaları kullanın. Bunlar , shared_ptrve gibi unique_ptrkapsayıcıları içerirvector. Daha fazla bilgi için bkz . Akıllı işaretçiler ve C++ Standart Kitaplığı.