Очень быстро падает.
Это потому что это:
Employee * employees[100];
Объявляет массив из 100 указателей сотрудников. НЕ объекты.
Затем в цикле вы пытаетесь получить доступ к несуществующему объекту:
employees[i]->name
Поскольку доступ осуществляется через указатель, который не был инициализирован.
Вы должны понимать объекты, прежде чем начать играть с указателями и динамически размещенными объектами.
Employee employees[100]; // Declare an array of 100 objects.
Тогда вы можете прочитать имена с помощью:
cin >> employees[i].name;
Но теперь у вас есть проблема с тем, что имя - это унифицированный указатель. Проблемы продолжаются вот так. Вы должны удалить указатели из своего кода и использовать объекты везде, где можете.