Это невозможно. void *
указатель, это просто указатель на память, больше ничего, никакой дополнительной информации к нему не прикреплено. Невозможно сделать то, что вы просите, вы не можете знать, сколько байтов до malloc
.
Именно поэтому функция qsort
из библиотеки stdlib.h
принимает в качестве параметра
size
в байтах каждого элемента массива. Если то, что вы предложили, было возможно, тогда
qsort
такой параметр не нужен.
Возможно, вы могли бы сделать что-то вроде этого:
...
Foo *f;
f = Allocate(f, sizeof(Foo));
...
void *Allocate(void *item, size_t size)
{
return malloc(size);
}