Lo dicho, solo deberías hacer 1 malloc.
Y bueno, ahora que me fijo, siendo C++, deberías poner
new en vez de malloc.
cadenaFinal = new char[this.inlen - end + beg + 1]
Y ahí, copias directamente lo que necesitas.
memcpy(cadenaFinal, cadenaInicial, beg);
memcpy(cadenaFinal+beg, cadenaInicial+end, this.inlen - end);
cadenaFinal[this.inlen - end + beg] = '\0';
Todo unido:
#include <iostream>
#include <cstdlib>
#include <cstring>
using namespace std;
int main(){
const char* cadenaInicial = "hola que tal estas";
int lenght = strlen(cadenaInicial);
int beg = 5,
end = 13;
char* cadenaFinal = new char[lenght - end + beg + 1];
memcpy(cadenaFinal, cadenaInicial, beg);
memcpy(cadenaFinal+beg, cadenaInicial+end, lenght - end);
cadenaFinal[lenght - end + beg] = '\0';
cout << cadenaFinal << endl;
}