Мой отладчик говорит, что у меня ошибка Segfault, но не могу сказать, где, происходит в очень определенных обстоятельствах

Селектор CSS « General Sibling Combinator » может быть использован для того, что вы хотите:

E ~ F {
    property: value;
}

Это соответствует любому элементу F, которому предшествует E ].

1
задан KevinCMD 28 March 2019 в 04:56
поделиться

1 ответ

В Player::menu у вас есть петля, for(auto& p : ItemsList). В этом цикле вы вызываете последовательность (useItem(item) -> ItemAttributes(itemID) -> removeItem(id) -> ItemsList.erase(itr)), которая может изменить карту ItemsList, через которую вы перебираете. Это делает недействительными итераторы, в настоящее время ссылающиеся на p, поэтому при попытке получить доступ к следующему элементу на карте вы получите неопределенное поведение, потому что (используемый внутри) итератор больше не действителен.

Одним из возможных способов решения этой проблемы является изменение цикла for для использования собственных итераторов и увеличение итератора в верхней части тела цикла (перед изменением карты):

for (auto it = ItemsList.begin(); it != ItemsList.end(); ) {
     auto &p = *it;
     ++it;
     // rest of for loop
}
0
ответ дан 1201ProgramAlarm 28 March 2019 в 04:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: