Ошибка очевидна. Внутри вложенного цикла for (unsigned int j=0; j<ammo_tower_group.size(); j++)
вызывается метод Boom_Enemy(i)
который удаляет i-ый элемент из глобального массива enemy_group.
Однако i после этого не меняется (ведь это вложенный цикл, который работает по j, а не внешний), и поэтому в строке ammo_tower_group.at(j).target==&enemy_group.at(i)
вовсе не факт, что enemy_group.at(i) будет существовать.
А вообще, Пакка, твой код по-прежнему представляет из себя мешанину из: названий различного стиля, размазанных по всему файлу классов (что мешает их в отдельные файлы выделить?), отсутствия комментариев и кучи глобальных переменных. Особенно последнее огорчает... Если уж хочешь, чтобы твой код был понятен другому человеку - пиши его так, чтобы он был понятен. Чтобы человеку не приходилось рыскать по всему файлу, дабы узнать - что значит такая-то глобальная переменная...