Attento che stai utilizzando la matrice C senza averla inizializzata ad un valore noto e new non la iniziallizza a zero come la calloc

codice:
string LCS(string X, string Y, MatriceInt &C, MatriceChar &B) {
	int X_len = X.length() + 1; int Y_len = Y.length() + 1; int i,j;
	string lcs =" ";
	C = new int*[X_len]; // qui istanzi la matrice      
        // Alloca la matrice per memorizzare la lunghezza  devi vari sottoproblemi LCS
          B = new char*[X_len];
	for (i =0; i< X_len; i++)
	{ C[i]=new int[Y_len]; B[i]=new char[Y_len];}
	B[0][0] = '\\\';
	for (i = 1; i< X_len; i++) {
	  for (j = 1; j< Y_len; j++) {
	           if (X[i-1] == Y[j-1])
		     { C[i][j] = 1 + C[i-1][j-1]; // e qui sommi 1 alla porcheria che contiene
// dal momento che non avendo inizializzato la matrice 
// ad un valore noto, i valori contenuti sono causali.
                        B[i][j] = '\\\';}
	              else if(C[i-1][j] >= C[i][j-1])
		                  { C[i][j] = C[i-1][j]; B[i][j] = '|';}
		          else {C[i][j]=C[i][j-1]; B[i][j] = '-';}
		}
	         }
	for(i = 1; i< Y_len; i++)                  // Costruisce la stringa di lunghezza LCS
	{ if(C[X_len-1][i] > C[X_len-1][i-1])  lcs = lcs + Y[i-1];}
	return lcs;
}