Когда вызывается malloc, размер сохраняется рядом с выделенным блоком, так что бесплатный будет знать, сколько бесплатно и т.д. (http://c-faq.com/malloc/freesize.html).
Мой вопрос: скажем, у нас есть динамически распределенная память, а позже в коде мы увеличиваем указатель
pointer++
И потом, если я назову
free(pointer)
какая память действительно освобождается.
Это количество выделенных байтов, начиная с текущего адреса, указанного указателем или от базового адреса, на который он был выделен.