LeaveCriticalSection問題的解決方案

1、問題描述

在VS2010執行過程之中,程序崩潰,出現了以下問題,導致程序中斷。如圖1所示


程序報錯如下所示:

  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清空的方式如下所示。

  1. vector <string> bmptest;//聲明  
  2.    //使用  
  3.    //****************************  
  4.    //使用後清空*********************  
  5.    bmptest.clear();//清空vector  
  6. vector <string>().swap(bmptest);//回收vector內存  

圖像內存的清空如下所示。

  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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章