Я пытаюсь отладить проблему, когда наша программа падает (segfault) в методе «addToOurSet» ниже:
class SomeClass {
// ( ... )
void addToOurSet(SomeOtherClass* obj) { ourSet.insert(obj); }
std::set<SomeOtherClass*> ourSet;
};
Сбой трудно воспроизвести из-за (среди прочего, сложности и большого размера данных, а также невозможности воспроизведения в отладочной сборке; приведенный выше пример, очевидно, сильно упрощен). Трассировка показывает сбой, произошедший в:
std::_Rb_tree<...>::insert_unique(SomeOtherClass* const&)
Мой вопрос: что может вызвать сбой метода ourSet.insert(...)
? Насколько я понимаю, сам вставленный объект не может вызвать его, поскольку он является указателем. Правильный? Так я смотрю на проблему с самим набором? Очевидно, что если указатель набора по какой-то причине недопустим, вызов может завершиться сбоем, но может, например, какая-то операция с множеством вызвать его таким образом, чтобы он стал недействительным (как, например, удаление после его завершения или что-то, что запрещено)? 1008 *