Даже если в 25 начну, то к 30 годам уже мидлом можно стать..., а это не так уж и плохо
open-source и свои проекты не считаются
it
в b
, убиваем элемент списка (b
продолжает указывать на хиповый объект), затем через b
освобождаем память. То есть мы руками перекладываем адрес туда-сюда, чтобы не потерять управление над объектом в куче. Вообще, ничто не мешало обойтись и без b
вовсе (тем более, что имя переменной "b" не добавляет читабельности):delete *it;
it = entities.erase(it);
*b
(то есть само значение по указателю) лежит в хипе, т.к. создавалось с помощью new
- entities.push_back(new Enemy(...))
, а на стеке - лишь указатели туда, ибо std::list<Enemy*> entities;
. это не мой код, и я боюсь всё испаганитьЭто значит то, что вы просто не знаете, как он работает, верно? Но ведь этот код может не учитывать кучу внешних нюансов и угадать возможную проблему надежды мало, выход один - нырять и пытаться разобраться!
Я вообще не понимаю причин вызова срабатывания точки остановаТочку останова вы сами поставили или вы этим нарекли всплывающий эксепшн? Если второе, то это неверно. Брейкпоинты - это такие штуки (в IDE это чаще всего обозначаются красными кружками на полях напротив строки с кодом), дойдя до которых отладчик останавливает выполнение программы и вы можете посмотреть, какие значения хранят переменные на текущий момент, а потом "пошагать" с этой точки вперед, внутрь других функций, наглядно наблюдая за изменением данных. Это поможет понять, на каком этапе указатель имеет невалидное значение.
var i
?