В приведенном ниже фрагменте кода я получаю сообщение об ошибке в строке, вызывающей push_back ():
CTrigger CTriggerManager::AddTrigger(const std::wstring& eventName)
{
CTrigger trigger(eventName);
m_Triggers.push_back(trigger);
return trigger;
}
Если это не ясно из кода, я пытаюсь инициализировать объект trigger
вставьте его в конец списка m_Triggers
, Может кто-нибудь сказать, пожалуйста, почему это может привести к segfault?
При необходимости посмотрите код в полном контексте Вот.
Где TriggerManger используется и объявлен? Могу поспорить, что, поскольку он вызывает сбой push_back, фактический экземпляр CTriggerManager является нулевым, и первый доступ к переменной-члену (m_Triggers) вызывает нарушение прав доступа.
Я вижу, что один объявлен здесь, но никогда не создавался
world.cpp:
CTriggerManager* pTriggerManager = NULL;
проблема, конечно, не в этой функции и даже не в файлах TriggerManager.h / cpp — оба класса действительно просты и наивны. кстати, для инициализации m_EventName
Лучше использовать список инициализации в конструкторе, а не оператор присваивания …
Попробуй использовать valgrind
например … может быть, он покажет вам что-то интересное по реальной причине … — кажется, вы испортили внутренний список где-то перед вызовом AddTrigger
…