関数外で動的確保した領域のサイズを、ポインタを引数でもらうだけで知ることはできますか?
int func(int *pi) {
  int size;
  ...
  return size;
}

int main(void) {
  int *buf = malloc(16);
  func(buf);
  return 0;
}