Ваш код предполагает, что если DB[id]
имеет любой семестр, он имеет семестр semester
:
if (DB[id].empty()) {
// ...
}
else
DB[id][semester]->push_back(b);
Если это не так, если он имеет некоторые семестр, но не этот, тогда вы не поймете это, и вы будете push_back
использовать нулевой указатель, созданный по умолчанию.Это означает, что ваша программа имеет неопределенное поведение, и сегодня причина сбоя.
Вместо этого вы можете попробовать:
if (!DB[id].count(semester)) {
// ...
}
else
DB[id][semester]->push_back(b);
… который фактически проверяет существование конкретного элемента внутренней карты.
Тебе было бы намного лучше без всего этого динамического распределения, хотя:
void add_course(
map<int, map<int, vector<course>>>& DB,
const int semester,
const int id,
const course c
)
{
DB[id][semester].emplace_back(c.name, c.section, c.credits);
}
Разве это не лучше?!