求助:关于内存分配的问题,弄不明白了


刚接触图像处理不久,对C++ 的内存分配也不是很清楚
这段是我的程序中的一段,经过测试后发现问题就在这段,请高手帮我看看

lpDIB=(LPBYTE)GlobalLock(hNewDib);
dwSize=DIBlockSize(lpDIB);//新图像的总大小
hDib=GlobalReAlloc(hDib,dwSize,0);
lpbi=(BITMAPINFO*)GlobalLock(hDib);
CopyMemory((LPBYTE)lpbi,(LPBYTE)lpDIB,dwSize); 
GlobalUnlock(hNewDib);
GlobalFree(hNewDib);
这段代码是一个函数的一部分,其中hNewDib是调用另一个函数的返回值得到的,是一个新的图像,我想做的就是把这个图像再拷贝到原来图像hDib中,hDib是一个全局变量。但加了这段代码后发现程序有问题了。后来用到lpDIBHdr=(LPBYTE)GlobalLock(hDIB),发现返回的lpDIBHdr是空值。但是最开始运行的几次都通过了,这个问题时后来出现的,就一直没有通过。当我注释掉上段程序的最后一句代码时,程序就能通过。请教各位高手,是不是GlobalReAlloc用的不对呢,到底错在哪里了,这个函数应该怎么用????

5 个解决方案

#1


hDib=GlobalReAlloc(hDib,dwSize,0);

参数和返回值是相同的,不对吧。

#2


我是提问者,谢谢楼上的回答,我也试过把重新分配的返回值赋给另一个变量,但是还是产生无效的地址。再次注释掉GlobalFree(hNewDib);时,就通过了。

#3


我想你这个hNewDib内存块里面有指针值,CopyMemory只能拷贝指针值,而没有拷贝指针指向的内存。

#4


hGlobal = GlobalAlloc(GMEM_MOVEABLE, dwFileSize);
pvData = GlobalLock(hGlobal);//锁定分配内存块 
ReadFile(hFile,pvData,dwFileSize,&dwByteRead,NULL);//把文件读入内存缓冲区 
GlobalUnlock(hGlobal); 
CreateStreamOnHGlobal(hGlobal, TRUE, &pStm); 
//装入图形文件 
OleLoadPicture(pStm,dwFileSize,TRUE,IID_IPicture,(LPVOID*)&pPic);

#5


没有一个解决了我的问题

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号