C6331

تحذير C6331: غير صالح معلمة: تمرير MEM_RELEASE و MEM_DECOMMIT بالاقتران <دالة> هو غير مسموح به. وهذا نتائج في فشل هذه المكالمة

تشير هذه الرسالة إلى التي تم تمريرها إلى VirtualFree أو VirtualFreeEx معلمة غير صالحة. كل من VirtualFree و VirtualFreeEx رفض الإشارات (MEM_RELEASE | MEM_DECOMMIT) معا. ولذلك، قيم MEM_DECOMMIT و MEM_RELEASE قد لا تستخدم معا في نفس يتصل.

هو غير مطلوب ل decommit والإصدار أن تظهر كخطوات مستقلة. سوف decommit ذاكرة Releكـing الملتزم بها الصفحات كـ أيضا. أيضا، تأكد أن لا يتم تجاهل القيمة المرجعة لهذه دالة.

مثال

نموذج تعليمات برمجية التالي بإنشاء هذا تحذير:

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

لتصحيح هذا التحذير، غير بتمرير القيمة MEM_DECOMMIT إلى استدعاء 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, MEM_RELEASE); 
  // code...
}

راجع أيضًا:

المرجع

أسلوب IHostMemoryManager::VirtualAlloc

أسلوب IHostMemoryManager::VirtualFree