Salve!
Ho creato queste due funzioni per eliminare un elemento dalla lista TeamList[ indice_lista ].list_players[] dati gli indici che si riferiscono all'elemento da eliminare.
Ho pensato di fare uno shift della lista dall'elemento in questione in poi così da compattarla, e, di reinizializzare poi l'ultimo elemento della lista così che non resti "sporco" in quanto non dovrebbe esistere.
Non riesco a capire come mai non funzioni.
Questo è il mio codice:

public void delete_player( int T_index, int P_index )
{
int i;
for (i = P_index; i < (frm_main.TeamList[T_index].N_players)-1; i++ )
{
frm_main.TeamList[T_index].list_players[i] = frm_main.TeamList[T_index].list_players[i + 1];
}
frm_main.TeamList[T_index].N_players--;
init_player( T_index, frm_main.TeamList[T_index].N_players);
}


public void init_player ( int T_index, int P_index )
{
frm_main.TeamList[T_index].list_players[P_index].denomination = "";
frm_main.TeamList[T_index].list_players[P_index].goal_keeper = false;
frm_main.TeamList[T_index].list_players[P_index].role = "";
for (int i = 0; i < 2 * frm_main.NumSessions; i++)
{
frm_main.TeamList[T_index].list_players[P_index].session[i].mark = -1;
frm_main.TeamList[T_index].list_players[P_index].session[i].rigor_kept = -1;
frm_main.TeamList[T_index].list_players[P_index].session[i].goal_suffered = -1;
frm_main.TeamList[T_index].list_players[P_index].session[i].admonished = false;
frm_main.TeamList[T_index].list_players[P_index].session[i].expelled = false;
frm_main.TeamList[T_index].list_players[P_index].session[i].fanta_mark = -1;
frm_main.TeamList[T_index].list_players[P_index].session[i].goal_done = -1;
frm_main.TeamList[T_index].list_players[P_index].session[i].goal_wrong = -1;
frm_main.TeamList[T_index].list_players[P_index].session[i].assist = -1;
}

}