L'appel à free(Good_Match_Idx) n'a lieu que si !tform.empty().
D'ailleurs, pourquoi utiliser un malloc()+free() au lieu d'un vecteur d'entiers?