我读取将屏幕一块矩形区域截取下来后,将位图信息读取到第四个参数里面,将该指针作为函数返回
值,因为要等到第二次截取同一区域做比较,所以要将数据保存下来,但是比对完后,该指针指向的内存区域怎么释放啊?这个问题纠结好久了,程序运行总会有内存泄露。。

解决方案 »

  1.   

    程序运行没问题,但是总存在内存泄露,free也释放会出错,GlobalUnlockPtr也不行!!要一直循环前后比对,这样下去内存不消耗完了,纠结啊!!
      

  2.   

    不要自己释放CreateDIBSection()函数返回回来的指针,当位图对象删除掉的时候,这块区域就会被释放掉。
    出现内存漏泄的现象很多是因为你的位图的大小计算不对,位图的大小应该这样计算:
    int nScanLine = bmpInfoHeader.biBitCount /8 * bmpInfoHeader.biWidth;
    nScanLine += (nScanLine %4)?(4 - nScanLine%4):0;//调整它进行四字节对齐
    imageSize = nScanLine * bmpInfo.biHeight;
      

  3.   

    成功解决了,重新开辟个堆来存储这些数据,返回其地址,OK
    BYTE* pByte = new BYTE[width*height*3];
    memcpy(pByte,lpBitmapBits,width*height*3); DeleteDC(hMemDC);
    DeleteObject(directBmp);
    return pByte;