Po tom ako odstrániš študenta zo zoznamu, nemôžeš ďalej zvyšovať iterátor, takže tam musíš dať break. Debugger by ti mal ukázať presne, kedy to spadne.
void SeznamStudentu::odeberStudenta(int id) {
list<Student*>::iterator i;
for (i = studenti.begin(); i != studenti.end(); ++i)
if ((*i)->getId() == id) {
studenti.erase(i);
break;
}
}