显示AVI文件某一帧的BMP图片,内存使用增加,该怎么解决

显示AVI文件某一帧的BMP图片,内存使用增加
大家帮忙看下这段代码
下面这个函数通过传进来的参数将AVI视频的某一帧显示在对应的控件区域内
调用一次内存使用就增加一点,内存使用随调用次数增加而增加,多调用几次图片不能正常显示
void CCutDlg::ShowBmp(int frame)
{
CRect bmprect;
m_Picture.GetClientRect(&bmprect);
m_Picture.MoveWindow(0,0,bmprect.Width(),bmprect.Height());

PAVISTREAM ps; 
PAVIFILE pfile;
AVIFileInit(); //初始化AVIFile函数库
HRESULT hRet; //定义结果变量
hRet = AVIFileOpen(&pfile,m_Name,OF_READ, NULL); //打开源文件
if (hRet != 0) //判断文件是否打开成功
{
MessageBox("打开源文件错误","提示"); //弹出错误提示
return;
}

AVIFILEINFO pfinfo;
AVIFileInfo(pfile,&pfinfo,sizeof(AVIFILEINFO)); 
AVIFileGetStream(pfile, &ps, streamtypeVIDEO, 0 );//获取视频流
//获取流信息
AVISTREAMINFO streaminfo;
AVIStreamInfo(ps,&streaminfo,sizeof(AVISTREAMINFO));
PGETFRAME pFrame; //定义帧接口对象
pFrame=AVIStreamGetFrameOpen(ps,NULL); //在流中打开帧
LPBITMAPINFOHEADER bih;
bih = (LPBITMAPINFOHEADER) AVIStreamGetFrame(pFrame, frame); 

BITMAPINFO Header;
memset(&Header,0,sizeof(BITMAPINFOHEADER));  
Header.bmiHeader.biBitCount=bih->biBitCount ;  
Header.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);  
  Header.bmiHeader.biWidth = pfinfo.dwWidth;  
Header.bmiHeader.biHeight = pfinfo.dwHeight;  
Header.bmiHeader.biPlanes =bih->biPlanes; 
Header.bmiHeader.biCompression =BI_RGB;  
Header.bmiHeader.biXPelsPerMeter = 0;  
Header.bmiHeader.biYPelsPerMeter = 0;

BITMAPFILEHEADER stFileHdr;
stFileHdr.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
stFileHdr.bfSize=sizeof(BITMAPFILEHEADER);
stFileHdr.bfType= ((WORD)('M'<< 8)|'B');

BYTE* pDIB=new BYTE[(((pfinfo.dwWidth*Header.bmiHeader.biBitCount)+31)/8)*pfinfo.dwHeight];
BYTE* lpbuff; 
lpbuff=pDIB;  
lpbuff=(BYTE *)AVIStreamGetFrame(pFrame,frame); 
lpbuff+=40;  

CClientDC dc(this); //生成一个与当前窗口相关的CClientDC
HBITMAP m_hBitmap;
//生成DIBitmap数据
m_hBitmap = CreateDIBitmap(dc.m_hDC,&Header.bmiHeader,CBM_INIT,lpbuff,&Header,DIB_RGB_COLORS);
delete[] pDIB;

AVIStreamGetFrameClose(pFrame);
if (m_hBitmap != NULL)
{
m_Picture.SetBitmap(m_hBitmap);
m_Picture.UpdateData();
}
BITMAP bmp;
GetObject(m_hBitmap,sizeof(bmp),&bmp);
CRect rect;
m_fDlg->GetClientRect(rect);
int xpos = m_fDlg->GetScrollPos(SB_HORZ);
if (xpos != 0)
m_fDlg->ScrollWindow(xpos,0); //恢复窗口的水平滚动区域
int ypos = m_fDlg->GetScrollPos(SB_VERT);
if (ypos != 0)
m_fDlg->ScrollWindow(0,ypos); //恢复窗口的垂直滚动区域

SCROLLINFO vinfo;
vinfo.cbSize = sizeof(vinfo);
vinfo.fMask = SIF_ALL;
vinfo.nPage = bmp.bmHeight/10;
vinfo.nMax= bmp.bmHeight-rect.Height()+bmp.bmHeight/10;
vinfo.nMin = 0;
vinfo.nTrackPos = 0;
vinfo.nPos = 0;
//设置垂直滚动条信息
m_fDlg->SetScrollInfo(SB_VERT,&vinfo);

vinfo.fMask = SIF_ALL;
vinfo.nPage = bmp.bmWidth/10;
vinfo.nMax= bmp.bmWidth-rect.Width()+bmp.bmWidth/10;
vinfo.nMin = 0;
vinfo.nPos = 0;
vinfo.nTrackPos = 0;
vinfo.cbSize = sizeof(vinfo);
//设置水平滚动条信息
m_fDlg->SetScrollInfo(SB_HORZ,&vinfo);
if(pfile != NULL)
AVIFileRelease(pfile);
AVIFileExit();
}
这个函数是什么原因造成内存使用增加的,某个资源没有释放掉么,像很多程序后面一串...release()
还有传进来的参数是AVI文件的最后一帧(文件总帧数是15帧,调用ShowBmp(15))的时候程序弹出应用程序错误提示框
0x00403113指令引用的0x0000000e内存。改内存不能为read 这个怎么处理

------解决方案--------------------
内存泄露撒,你仔细检查gdi哪些没释放 new的没释放?