一、事情起因
一條線程調用了Map 的一個erase方法 結果dump了
二、原因假設
1、Map中的的數據被其他線程釋放了,通過find驗證了一下,不可能,數據還在,活生生的
2、Map中的數據被覆蓋了或者被改寫了 分析結果:看了一下數據,都沒錯,字節也都對齊
3、通過單步調試發現,在STL內部調用結尾釋放指針是,所指的地址出現異常,正常情況應該是一個空指針,結果是有了一個莫名的值。懷疑這部分數據被篡改。
但是到底是哪裡呢,。。。。。。。。。。。。。。。。。。一個漫長的注釋,反注釋調試的過程。終於在這個的一個地方 發現了問題的原因
三、問題場景
線程1
memcpy(m_curProxyAddr.szUserPass, m_curProxyAddrInfoEntity->szUserPass, 50);
m_CallSyncMap.erase(pReq->lSyncID);