But how can I then implement realloc in my code with malloc/free/..?
Si ya está utilizando malloc & libre, ¿por qué no sólo tiene que utilizar realloc? de lo contrario, puede echar un vistazo a la fuente de CRT que se incluye con MSVC/gcc, etc. (o simplemente descargarla, en el caso de GCC), y ver cómo la implementan. Si el funcionamiento de un asignador de costumbre, entonces es un poco más la situación, por ejemplo: Yo uso un cubo binario con un sistema de tipo de losa, en cuyo caso realloc es simple:
void* Reallocate(Manager* pManager, void* pBlock, size_t nSize, const char* szFile, const DWORD dwLine)
{
#if (MMANAGER_NULL_TO_DEFAULT)
if(pManager == NULL)
pManager = MMANAGER_DEFUALT_MANAGER;
#endif
if(pBlock == NULL)
return Allocate(pManager,nSize,szFile,dwLine);
else if(nSize == 0)
{
Free(pManager,pBlock,szFile,dwLine);
return NULL;
}
BlockHeader* pHeader = GetHeader(pBlock);
size_t nPrevSize = pHeader->pPoolBlock->nSize;
if(nPrevSize < nSize)
{
void* pNewBlock = Allocate(pManager,nSize,szFile,dwLine);
memcpy(pNewBlock,pBlock,nPrevSize);
PoolBlock* pPoolBlock = pHeader->pPoolBlock;
if(pPoolBlock == NULL)
free(pHeader);
else
FreeBlock(pPoolBlock,pHeader);
return pNewBlock;
}
return pBlock;
}
Su implementación de realloc tendrá que seguir la implementación de malloc y libre. Implementarlo sin el conocimiento especial que malloc y free have no es realmente factible. Si logras que funcione con una implementación malloc, probablemente no funcione con otros. – nategoose