LeaveCriticalSection问题的解决方案

来源:互联网 发布:mysql的好处 编辑:程序博客网 时间:2024/04/30 08:19

1、问题描述

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


程序报错如下所示:

[cpp] view plain copy 在CODE上查看代码片派生到我的代码片
  1. *******************************************************************************/  
  2.   
  3. void __cdecl _unlock (  
  4.         int locknum  
  5.         )  
  6. {  
  7.         /* 
  8.          * leave the critical section. 
  9.          */  
  10.         LeaveCriticalSection( _locktable[locknum].lock );  
  11. }  

2、解决方案

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

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

[cpp] view plain copy 在CODE上查看代码片派生到我的代码片
  1. vector <string> bmptest;//声明  
  2.    //使用  
  3.    //****************************  
  4.    //使用后清空*********************  
  5.    bmptest.clear();//清空vector  
  6. vector <string>().swap(bmptest);//回收vector内存  

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

[cpp] view plain copy 在CODE上查看代码片派生到我的代码片
  1. IplImage* srctest = cvLoadImage(imagename);  //srctest为读入测试原始图像  
  2. if(!srctest)    
  3. {    
  4.     fprintf(stderr, "Can not load image %s\n", imagename);    
  5.     return -1;    
  6. }  
  7. cvReleaseImage(&srctest);//清空图像内存  


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

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

3、总结

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

4、致谢

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

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

0 0
原创粉丝点击