您的位置:首页 > 其它

LeaveCriticalSection问题的解决方案

2016-05-01 20:49 323 查看

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: