在我的代码中,我有一个类Log
,其成员函数为Push
。在其他地方,我使用来自非类函数的实例pLog->Push
来调用此类函数。
void some_stuff()
{
pLog->Push(...);
}
执行此操作会导致SIGSEGV:
void Log::Push(const char *b)
{
std::lock_guard<std::mutex> lock(m_Mutex);
m_Messages.push_back(b); // std::deque<std::string>
}
删除互斥锁时,会在m_Messages.push_back(b)
调用另一个崩溃。
经过一些研究后,我发现不会发生some_stuff
这个崩溃的Log
成员。
我甚至在另一个g ++版本(4.9)上试过这个,但它仍然会发生。