Intanto puoi correggere i delete che sono sbagliati. Se usi un new[] per allocare qualcosa, devi usare un delete [] per deallocarlo.
codice:
for (i=0;i<X.length();i++)  { 
   delete[] C[i]; 
   delete[] B[i];
}
delete[] C; delete[] B;