Si è quello che volevo fare e fatto inizialmente, poi ho perso il filo.
Anche il problema del nome... inserito prima della free non da problemi.
Quello che non capisco è se la free funziona, perché le stampe finali continuano a trovarmi i valori della matrice a quell'indice. Adesso il codice è questo, cioè con l'inserimento del secondo indice tipo matrice dopo la modifica della malloc come suggerita:

codice:
for(i = 0; i <= numeroInserimenti; i++) {
        if(ptrVettStud[i][0].matricola == tmp_matricola) {
            printf("Lo studente %s %s e' stato rimosso dall'archivio.\n", ptrVettStud[i][0].nome, ptrVettStud[i][0].cognome);
            free(ptrVettStud[i]);
            printf("Operazione avvenuta con successo!\n");
            printf("Lo studente %s %s e' stato rimosso dall'archivio.\n", ptrVettStud[i][0].nome, ptrVettStud[i][0].cognome);
        }
        else {
            printf("Il numero di matricola non e' in elenco.\n");
        }
        //break;
    }    
    
    printf("%d\n", ptrVettStud[0][0].matricola);
    printf("%d\n", ptrVettStud[1][0].matricola);
    printf("%d\n", ptrVettStud[2][0].matricola);