PDA

View Full Version : سوال: HeapFree



samin_panahi
دوشنبه 13 دی 1395, 11:43 صبح
سلام
چطور می شه یک بافر رو چک کرد که اگر free شده دیگه مجدد free روش صورت نگیره
این برنامه رو ببینید:

#define LEN1 100000
#define LEN2 200000
Buffer = (CHAR*) HeapAlloc(GetProcessHeap(), 0, LEN1);
if (Buffer) // 1
{
// ...
if (something) // 2
{
// do something with Buffer and use it
// ...
HeapFree(GetProcessHeap(), 0, Buffer);

Buffer = (CHAR*) HeapAlloc(GetProcessHeap(), 0, LEN2);
if (Buffer) // 3
{
// do something with Buffer and use it
// ...
HeapFree(GetProcessHeap(), 0, Buffer);
}

}
HeapFree(GetProcessHeap(), 0, Buffer);
}

اگر برنامه وارد حلقه ی 3 بشه در انتهای حلقه بافر آزاد می شه و دیگه تیاز نیست در انتهای حلقه ی 1 اون رو آزاد کرد
اما اگر وارد حلقه ی 2 یا 3 نشه باید در انتهای حلقه ی 1 آزاد بشه
در صورتی که وارد حلقه ی 3 بشه و در انتهای حلقه ی 1 هم HeapFree فراخوانی بشه برنامه کرش می کنه
چطور باید چک کنم که اگر free نشده free کن و اگر شده HeapFree فراخوانی نشه؟

negative60
دوشنبه 13 دی 1395, 21:18 عصر
بعد از هر بار آزاد کردن بافر اشارگرش رو نال کن, و قبل از آزاد کردن مجدد اشاره گر buffer رو چک کن اگر نال بود پس نیاز به آزاد سازی نداره