LeaveCriticalSection内存死锁问题

某天下午双眼迷离的用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都清理了一波,检查了一遍全局变量,防止因为多重调用而发生的死锁问题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

breakpoints_

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值