Multithreading 分段错误的可能原因是什么?

Multithreading 分段错误的可能原因是什么?,multithreading,c++11,segmentation-fault,gdb,Multithreading,C++11,Segmentation Fault,Gdb,代码段如下所示: ValueMapIter valueIter; for (valueIter = activeValues->begin(); valueIter !=activeValues->end(); ++valueIter) { cout << "Before First" << endl; cout << "sizeactivevalue:" << activeValues->

代码段如下所示:

ValueMapIter valueIter;    
for (valueIter = activeValues->begin(); valueIter !=activeValues->end(); ++valueIter)
{
        cout << "Before First" << endl;
        cout << "sizeactivevalue:" << activeValues->size() << endl;
        cout << "first:" << valueIter->first << "Second:" << valueIter->second << endl;
}
ValueMapIter-valueIter;
对于(valueIter=activeValues->begin();valueIter!=activeValues->end();++valueIter)
{

cout最大也是最常见的原因可能是。到底是什么导致了UB(简称为)视情况而定。可能是取消引用空指针?可能是试图释放内存两次或释放尚未分配的内存?可能是取消引用以前未分配的指针?UB背后有很多原因,所有这些原因都不好,很多都会导致崩溃,如果“幸运”的话它甚至可能有效。为了帮助您解决问题,您必须向我们提供更多信息,例如
activeValues
的声明,什么是
valueIter->first
,什么是
valueIter->second
。此外,您是否在不锁定的情况下从其他线程中删除
activeValues
中的元素没有锁定的t-out?通常不会在任何地方锁定?作为我之前评论的补充,它不仅仅是从一个线程中删除会在没有同步的情况下导致问题的线程,某些容器在添加元素时也可能使迭代器无效。您可能需要检查例如。
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x2aaaac8ad940 (LWP 8346)]
0x000000000043e732 in ValueManager::InsertModValue (this=0xd455c90, Id=4615, PId=7753, eId=1100000010570903, iId=2, inId=44301, pe=830795, t=25, bl=2, ste=3, sde=2)
    at /home/pathtofile/valuemanager.cpp:304
304     cout << "first:" << valueIter->first << "Second:" << valueIter->second << endl;