在下面的代码段中,我在调用 push_back() 的行上得到一个段错误:
CTrigger CTriggerManager::AddTrigger(const std::wstring& eventName)
{
CTrigger trigger(eventName);
m_Triggers.push_back(trigger);
return trigger;
}
如果从代码中不清楚,我正在尝试初始化一个对象trigger
将其推到列表m_Triggers
的背面。谁能告诉我为什么这可能会导致段错误?
如果需要,请参阅此处的完整上下文中的代码。
在哪里使用和声明扳机管理器? 我敢打赌,由于它在push_back上崩溃,CTriggerManager 的实际实例为空,并且对成员变量 (m_Triggers) 的第一次访问会导致访问冲突。
我看到一个在这里声明,但从未实例化:世界.cpp:
CTriggerManager* pTriggerManager = NULL;
不在这个函数中,甚至不在 TriggerManager.h/cpp 文件中——这两个类都非常简单和幼稚。 顺便说一句,要初始化m_EventName
最好在构造函数中使用初始列表,而不是赋值运算符......
例如,尝试使用valgrind
...也许它会告诉你一个真正的原因很有趣......——似乎你在打电话给AddTrigger
之前在某个地方破坏了一个内部列表......