En general el tamaño del espacio de memoria que tiene asignado un puntero no se puede saber, para pasarlo a una función podés hacer lo que hiciste, pasando el largo como parámetro, o usar una
struct
como un arreglo con tope para guardarlo:
struct ArregloConTope {
int *data;
int length;
}
Y pasarle eso a la función.