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