自己写的一个颜色处理函数, 传进来的lpbyBits24是24bit位图的raw data(从下向上), 想对其进行处理.可是建立的拷贝pbySrcCopy在函数的最后不能delete.
这样造成占用内存空间很大. 为什么在这里不能delete呢?请指教.BOOL CColorDetection::Filter(LPBYTE lpbyBits24, int x, int y, 
int nWidth, int nHeight, int nScanWidth, int nScanHeight)
{
//建立一份拷贝
BYTE* pbySrcCopy = new BYTE[ (nWidth * nHeight * 3) ];
if(pbySrcCopy == NULL) return FALSE; BYTE* pbyDst = lpbyBits24; 
for(int k = 0; k < nHeight; k++)
{
for(int l = 0; l < nWidth; l++)
{
(*pbySrcCopy) = (*pbyDst);
pbySrcCopy++;
pbyDst++;
(*pbySrcCopy) = (*pbyDst);
pbySrcCopy++;
pbyDst++;
(*pbySrcCopy) = (*pbyDst);
pbySrcCopy++;
pbyDst++;
}
}    BYTE pbyRed;
BYTE pbyGreen;
BYTE pbyBlue;    pbyDst = lpbyBits24 + nWidth * (nHeight + 1) * 3;
pbySrcCopy += nWidth * 3;  for(int i = 0; i < nHeight; i++)
{
pbyDst -= 2 * 3 * nWidth;
pbySrcCopy -= 2 * 3 * nWidth; for(int j = 0;j < nWidth; j++)
{
pbyBlue = *pbySrcCopy++;
pbyGreen = *pbySrcCopy++;
pbyRed = *pbySrcCopy++; //对每个象素进行颜色处理
PIXELCOLORRGB rgb = ColorDetection(pbyRed, pbyGreen, pbyBlue);

//写向目的数据缓冲区
*pbyDst++ = rgb.blue;
*pbyDst++ = rgb.green;
*pbyDst++ = rgb.red;
}
}

delete[] pbySrcCopy;

return TRUE;
}

解决方案 »

  1.   

    楼主范了一个错误
    pbySrcCopy++;
    这些代码改变了指针的指向,最后删除当然会出问题
    BYTE* pbySrcCopy = new BYTE[ (nWidth * nHeight * 3) ];BYTE* pTemp=pbySrcCopy;……………………
    delete []pTemp;
    这样的话如果中间没有出现数组越界的情况是绝对没问题的
      

  2.   

    pbySrcCopy++
    ...
    pbyDst = lpbyBits24 + nWidth * (nHeight + 1) * 3;
    pbySrcCopy += nWidth * 3;
    已经越界了在对pbySrcCopy复职地方,加上assert就可以知道为什么了!