LPBITMAPINFOHEADER m_lpBMPHdr;m_lpBMPHdr = (LPBITMAPINFOHEADER)GlobalLock((HGLOBAL) hdib);
::GlobalUnlock((HGLOBAL) hdib);if (m_lpBMPHdr != NULL)
{
delete[] m_lpBMPHdr;
m_lpBMPHdr = NULL;
}当执行delete时就报错了。错误提示:User breakpoint called from code at 0x7c921970.
::GlobalUnlock((HGLOBAL) hdib);if (m_lpBMPHdr != NULL)
{
delete[] m_lpBMPHdr;
m_lpBMPHdr = NULL;
}当执行delete时就报错了。错误提示:User breakpoint called from code at 0x7c921970.
不能用delete来处理
GlobalLock后,只是给予了你对内存的访问权限,但是没有给你释放的权限
{
delete[] m_lpBMPHdr;
m_lpBMPHdr = NULL;
}
m_lpBMPHdr = (LPBITMAPINFOHEADER)GlobalLock((HGLOBAL) hdib);
::GlobalUnlock((HGLOBAL) hdib);
这个过程执行后,我都用GlobalFree释放了hdib,这种情况下报错的。不知要怎样改进
没有new就没有delete
就象坐沙发那位说的
楼上说的对
new和delete配对
malloc和free配对
GlobalAlloc和GlobalFree配对
在一个类中,如果不将指针初试化为NULL,那么在析构时:
if (m_lpBMPHdr != NULL)
{
delete[] m_lpBMPHdr;
m_lpBMPHdr = NULL;
}
这样的判断语句肯定是非法的.因为即使有new语句配对,但没有执行new操作的话,一样发生异常(例如没有打开图片),所以...
将一个指针初始化为NULL是一个很好的习惯,会避免不必要的麻烦.