Если я не прав поправте.
for (it = entities.begin(); it != entities.end();)
{
Entity *b = *it;
b->update(time);
if (b->life == false) { it = entities.erase(it); delete b; }
else it++;
}
Entity *b размещается в стеке.
delete применяется к объектам размещенным в куче с помощью new.
Может в этом табл?
Использование оператора delete на указателе на объект, который не был создан при помощи оператора new, создает непрогнозируемый результат.(сайт MSDN Microsoft)
Примечание 1. Если у вас установлена ОС с включенной данной опцией - отключить опцию с данной ОС ее не получиться. Поэтому включать данную опцию не рекомендуется.