LeaveCriticalSection问题的解决方案

1、问题描述

在VS2010执行过程之中,程序崩溃,出现了以下问题,导致程序中断。如图1所示


程序报错如下所示:

*******************************************************************************/

void __cdecl _unlock (
        int locknum
        )
{
        /*
         * leave the critical section.
         */
        LeaveCriticalSection( _locktable[locknum].lock );
}

2、解决方案

(1)原因描述:内存空间占据过大,需要释放内存空间。

         解决办法:针对这个问题,需要清空很多使用完的内存,如<vector>的内容、图片占据的内存等等。其中。vector清空的方式如下所示。

	vector <string> bmptest;//声明
    //使用
    //****************************
    //使用后清空*********************
    bmptest.clear();//清空vector
	vector <string>().swap(bmptest);//回收vector内存

图像内存的清空如下所示。

		IplImage* srctest = cvLoadImage(imagename);  //srctest为读入测试原始图像
		if(!srctest)  
		{  
			fprintf(stderr, "Can not load image %s\n", imagename);  
			return -1;  
		}
		cvReleaseImage(&srctest);//清空图像内存


(2)原因描述:不同的进程调用同一个资源,导致死锁问题发生。或者是不同的进程同时要求更改某一变量导致。

         解决办法:整理程序,将那些命名相同的名称改一下,换成不同的变量名。有效防止一个全局变量在两个线程中同时被操作的可能性。然后问题解决。

3、总结

这种问题偏向于,变量命名问题,需要对自己的变量命名规范一下,防止多重调用导致的死锁现象发生。希望能够对读者有所帮助。

4、致谢

[1]http://blog.csdn.net/amwfnyq/article/details/25139067

[2]http://blog.csdn.net/ninedays/article/details/5381123

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ACMSunny

赠人玫瑰,手有余香。

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

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

打赏作者

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

抵扣说明:

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

余额充值