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