请教一个关于C++内存泄漏的问题(有关Opencv的使用)

CQU_LiuHC 2016-04-08 05:03:03
最近在写一个小项目用到了Opencv这个库。但是造成了大量的内存泄漏。我应该是找到了内存泄漏的原因,但是不知道如何去解决,请大神们帮帮忙!!! 这个小项目是利用Opencv这个库来打开摄像头,处理摄像头所捕捉到的画面。

代码大致如下:
//全局变量
VideoCapture VCap;
Mat MCurrentFrame;
IplImage* pFrame = NULL;
IplImage* pFrameHSV = NULL;

//打开摄像头

while(true){
VCap.read(MCurrentFrame);
pFrame = &IplImage(MCurrentFrame);//将当前画面保存到pFrame中
::PostMessage(T->m_hWnd, WM_MY_SHOW, NULL, 1);//发消息,在响应此消息时将pFrame所指向的图像显示在界面中
cvCvtColor(pFrame, pFrameHSV, CV_BGR2YCrCb);//色彩空间转换

//然后开始处理pFrameHSV,主要是利用codeBook模型来区分出前景
}

我知道大概是因为在 pFrame = &IplImage(MCurrentFrame);这句代码之前我没有将pFrame之前所指向的内存回收,cvCvtColor(pFrame, pFrameHSV, CV_BGR2YCrCb);也是同样的情况吧。

可是当我在 pFrame = &IplImage(MCurrentFrame);前加上if(pFrame!=NULL){delete pFrame;}时会在delete pFrame这句中断,当把delete pFrame换成cvReleaseImage(&pFrame);时,又会将pFrame这个指针本身连同其指向的内容一起删除掉,执行pFrame = &IplImage(MCurrentFrame);又说找不到pFrame这个指针了。。。

在看了很多东西后仍然无果,只好让大神告诉我到底该怎么做了。先谢谢各位大神了。
...全文
522 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
CQU_LiuHC 2016-04-10
  • 打赏
  • 举报
回复
引用 3 楼 yuelengdihai的回复:
[quote=引用 2 楼 CQU_LiuHC 的回复:] [quote=引用 1 楼 yuelengdihai 的回复:] 你还要继续用为什么pFrame = &IplImage(MCurrentFrame);之前要释放呢?用完再释放啊
这是指针,如果在pFrame = &IplImage(MCurrentFrame);之前不先释放pFrame,那pFrame之前所指向的内存就再也找不回来了,这不就内存泄漏了吗。我用类似于_CrtDumpMemoryLeaks();的函数检查过,确实不先释放就会造成内存的泄漏。[/quote] 释放了再用需要再申请下内存吧[/quote] 那个IplImage函数已经开辟了内存,pFrame只是指向那个内存。释放(delete)pFrame只会是释放掉指针所指向的内存和修改指针所存放的内容(内存地址),指针本身还是可以用的。
cocoabird 2016-04-09
  • 打赏
  • 举报
回复
引用 2 楼 CQU_LiuHC 的回复:
[quote=引用 1 楼 yuelengdihai 的回复:] 你还要继续用为什么pFrame = &IplImage(MCurrentFrame);之前要释放呢?用完再释放啊
这是指针,如果在pFrame = &IplImage(MCurrentFrame);之前不先释放pFrame,那pFrame之前所指向的内存就再也找不回来了,这不就内存泄漏了吗。我用类似于_CrtDumpMemoryLeaks();的函数检查过,确实不先释放就会造成内存的泄漏。[/quote] 释放了再用需要再申请下内存吧
CQU_LiuHC 2016-04-09
  • 打赏
  • 举报
回复
引用 1 楼 yuelengdihai 的回复:
你还要继续用为什么pFrame = &IplImage(MCurrentFrame);之前要释放呢?用完再释放啊
这是指针,如果在pFrame = &IplImage(MCurrentFrame);之前不先释放pFrame,那pFrame之前所指向的内存就再也找不回来了,这不就内存泄漏了吗。我用类似于_CrtDumpMemoryLeaks();的函数检查过,确实不先释放就会造成内存的泄漏。
cocoabird 2016-04-08
  • 打赏
  • 举报
回复
你还要继续用为什么pFrame = &IplImage(MCurrentFrame);之前要释放呢?用完再释放啊

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧