C6250
تحذير C6250: استدعاء <دالة> VirtualFree دون فقد تحرير ذاكرة يؤشر MEM_RELEASE ولكن لا تعالج واصفات (VADs) ينتج تسرب مسافة العنوان
هذا التحذير يشير إلى أن استدعاء VirtualFreeدون MEM_RELEASEdecommits يؤشر فقط للصفحات، و لم حررها. إلى decommit و قم بتحرير الصفحات، استخدم MEM_RELEASEيؤشر في الدعوة إلى VirtualFree. إذا كان يتم تنفيذ أية الصفحات في المنطقة، دالة أولاً decommits و تطلق عليها. بعد هذه تشغيل، الصفحات الموجودة في الحالة الحرة. إذا قمت بتعيين هذه يؤشر dwSizeيجب أن تكون صفراً، و lpAddressيجب أن يشير إلى العنوان الأساسي الذي تم إرجاعه بواسطة VirtualAllocدالة عندما تم محجوز المنطقة. وتفشل الوظيفة إذا كان أي من هذه الشروط هو لم يتحقق.
يمكنك تجاهل هذا التحذير إذا الخاص بك تعليمات برمجية فيما بعد بتحرير مسافة العنوان بواسطة استدعاء VirtualFreeمع MEM_RELEASEيؤشر.
لمزيد من معلومات راجع VirtualAlloc و VirtualFree .
مثال
نموذج تعليمات برمجية التالي بإنشاء هذا تحذير:
#include <windows.h>
#include <stdio.h>
#define PAGELIMIT 80
DWORD dwPages = 0; // count of pages
DWORD dwPageSize; // page size
VOID f( )
{
LPVOID lpvBase; // base address of the test memory
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);
//
// code to access memory
// ...
if (lpvBase != NULL)
{
if (VirtualFree( lpvBase, 0, MEM_DECOMMIT )) // decommit pages
{
puts ("MEM_DECOMMIT Succeeded");
}
else
{
puts("MEM_DECOMMIT failed");
}
}
else
{
puts("lpvBase == NULL");
}
}
إلى تصحيح هذا التحذير، استخدم نموذج تعليمات برمجية التالي:
#include <windows.h>
#include <stdio.h>
#define PAGELIMIT 80
DWORD dwPages = 0; // count of pages
DWORD dwPageSize; // page size
VOID f( )
{
LPVOID lpvBase; // base address of the test memory
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);
//
// code to access memory
// ...
if (lpvBase != NULL)
{
if (VirtualFree(lpvBase, 0,MEM_RELEASE )) // decommit & release
{
// code ...
}
else
{
puts("MEM_RELEASE failed");
}
}
else
{
puts("lpvBase == Null ");
// code...
}
}