C6331

Aktualisiert: November 2007

C6331

Warnung C6331: Ungültiger Parameter: Das Übergeben von MEM_RELEASE und MEM_DECOMMIT zusammen mit <Funktion> ist nicht zulässig. Dies führt zu einem Fehler bei diesem Aufruf.

Diese Meldung gibt an, dass ein ungültiger Parameter an VirtualFree oder VirtualFreeEx übergeben wird. Sowohl VirtualFree als auch VirtualFreeEx lehnen die Kombination der Flags (MEM_RELEASE | MEM_DECOMMIT) ab. Daher können der MEM_DECOMMIT-Wert und der MEM_RELEASE-Wert nicht zusammen im selben Aufruf verwendet werden.

Decommit und Freigabe müssen nicht als einzelne Schritte ausgeführt werden. Bei der Freigabe von belegtem Speicher wird auch ein Decommit für die Seiten ausgeführt. Stellen Sie auch sicher, dass der Rückgabewert dieser Funktion nicht ignoriert wird.

Beispiel

Im folgenden Beispielcode wird diese Warnung generiert:

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

Um diese Warnung zu korrigieren, übergeben Sie nicht den MEM_DECOMMIT-Wert an den VirtualFree-Aufruf, wie im folgenden Code dargestellt:

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

Siehe auch

Referenz

IHostMemoryManager::VirtualAlloc-Methode

IHostMemoryManager::VirtualFree-Methode