Это дешевый хак, но я пытаюсь изменить метод распределения библиотеки C, над которой я работаю. По какой-то причине он использовал GlobalLock, возможно, потому, что раньше это было несколько DLL. Я изменил его на выделение:
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)
(хотя я думаю, что на каждой платформе Windowssizeof(HANDLE)
==sizeof(void *)
==sizeof(size_t)
). - person Matteo Italia   schedule 21.01.2012void *
64-битный, аsize_t
32-битный... - person R.. GitHub STOP HELPING ICE   schedule 21.01.2012