這是一個廉價的黑客,但我想改變我正在處理的C庫的分配方法。出於某種原因,它使用了GlobalLock,可能是因爲它曾經是多個DLL。我已經把它改爲頁頭:更新C庫,獲得堆腐敗
HANDLE BmiDibAlloc(size_t uBytes)
{
HANDLE alloc = malloc(uBytes + sizeof (size_t));
if (alloc != NULL)
{
memcpy_s(alloc, sizeof (alloc), &uBytes, sizeof (size_t));
}
return BmiDibAttach(alloc); //just tracks the number of memory allocs for logging
}
BOOL BmiDibFree(HANDLE hdib)
{
if (!hdib) {
return TRUE;
}
free(hdib);
// Forget this handle:
return BmiDibDetach(hdib);
}
既然不能使用GlobalSize了我釘在第一的sizeof(爲size_t)字節分配的大小...
時對位圖寫入罰款後分配用第一種方法 - 但是,當我到Free時拋出一個堆腐敗。授予它可能在這些電話之間的某個地方,有沒有人看到與給出的信息有關的錯誤?
你的代碼看起來很好,可能問題出在代碼的其餘部分;我認爲唯一的錯誤是sizeof(alloc)'錯誤,它應該是'sizeof(size_t)'(儘管我認爲在每個Windows平臺上sizeof(HANDLE)'== sizeof(void *)' =='的sizeof(爲size_t)')。 –
@MatteoItalia你明白爲什麼我需要這樣做,但?庫的某些部分以前會在分配上使用GlobalSize()。也許我可以用sizeof(* alloc)代替它,如果它不是void *。 –
如果你預先考慮了大小,你確定使用這個內存的一切都不會弄亂它嗎?如果你的內存塊實際上是uBytes + sizeof(size_t)的話調整它? – nos