ASSERT(pObject->IsKindOf(RUNTIME_CLASS(CSyncObject)));
> xxx.exe!CSingleLock::Lock(unsigned long dwTimeOut) 行 108 C++
m_bAcquired = m_pObject->Lock(dwTimeOut);
断言失败崩溃在mtex.cpp源码的上述行中:同步对象不是CSyncObject类型的对象或同步对象Lock失败。出现类似这样的问题,表面看似乎是同步对象的问题,可是排查源码发现CSingleLock及同步对象均正常使用。
猜测是由于某种原因,破坏了同步对象的数据,导致使用时出现奇怪的错误。导致这种情况的原因可能有:缓冲区溢出,内存被非法修改,dll动态库与编译lib不匹配(如使用低版本的lib编译出的exe调高版本的dll,即可能发生函数偏移量错位等情况)等。
可以往这个方向去查,本文仅提供一个思路。有其他的异常情况或好的解决方案欢迎回复评论。