某天下午双眼迷离的用vs写着代码,一不小心报了个错,转到了mlock.c文件
/***
* _unlock - Release multi-thread lock
*
*Purpose:
* Note that it is legal for a thread to aquire _EXIT_LOCK1
* multiple times.
*
*Entry:
* locknum = number of the lock to release
*
*Exit:
*
*Exceptions:
*
*******************************************************************************/
void __cdecl _unlock (
int locknum
)
{
/*
* leave the critical section.
*/
LeaveCriticalSection(_locktable[locknum].lock);
}
我是由于 char* InsertSQL = new char[200];
sprintf(InsertSQL, "select.........................%d%s", inta, strString);
最后在std::vector<std::vector<HookData>> rdb_HookturnData
rdb_HookturnData.push_back(xxx);的时候转跳到这里报错的
改正方法char* InsertSQL = new char[300],其实我的InsertSQL语句只有115个字节,然后程序跑通了,但是我并不觉得问题得到了解决,或者只是运气,我觉得内存被写死锁,一定是内存使用不当造成的,申请的内存没有得到及时的释放,或者栈内存也没有释放,比如用完的vector没有及时clear(),当然我这里不涉及多线程。所以我把vector都清理了一波,检查了一遍全局变量,防止因为多重调用而发生的死锁问题