麻烦哪位高人帮我看一下这段代码,运行结果显示内存不足,我想用的是多帧图像平均法,我的内存是2G的,看看算法需要改进那些地方内存就能够用,希望大家多多留言,谢谢了!!
unsigned char * pBuffer=new unsigned char[Width*Height*TotalFrames];
unsigned char * bkBuffer=new unsigned char[Width*Height];
int nFrameSize=Width*Height;
DWORD dwRead;
for (int k=0;k<TotalFrames;k++)
{
SetFilePointer(m_hFile,k*(Width*Height),NULL,FILE_BEGIN);
ReadFile(m_hFile,pBuffer+k*nFrameSize,Width*Height,&dwRead,NULL);
}
for (int p=0;p<Width*Height;p++)
{
for (int i=1;i<TotalFrames;i++)
{
*(pBuffer+p)+=*(pBuffer+Width*Height*i); }

}

for (int m=0;m<Width*Height;m++)
{
*(bkBuffer+m)=*(pBuffer+m)/TotalFrames; }
delete[]pBuffer;
pBuffer=NULL; int row=Height-1;
int n=0;
while(row>0)
{
for (int col=0;col<Width;col++)
{
*(BMPbuffer+n)=*(bkBuffer+col+row*720);
n++;
}
row--;
}
delete[]bkBuffer;
bkBuffer=NULL;

解决方案 »

  1.   

    同意1楼看法,建议楼主跟踪查看每次new时的参数
      

  2.   

    new unsigned char[Width*Height*TotalFrames]
    这个有点儿恐怖,数据溢出的可能性不大,但是内存不足的可能性大增
    使用new申请的内存空间即为在“堆”中申请,堆内存空间包含物理内存空间+虚拟内存空间
    如果你申请的值超出 两者剩余空间的总和 那肯定要产生内存空间不足的问题建议楼主是用 CreateFileMapping 函数创建映像文件,来解决
    或者楼主调整虚拟内存的大小来解决这个问题
      

  3.   

    Width*Height*TotalFrames确保三个数值不等零