Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, kmn, Вы писали:
kmn>>Здравствуйте, Аноним, Вы писали:
А>>>Здравствуйте, SchweinDeBurg, Вы писали:
SDB>>>>Здравствуйте, <Аноним>, Вы писали:
kmn>>И счего Вы взяли, что под 2K нет утечки?
kmn>>насчет того, что нет delete Вам уже сказали.
kmn>>хочу лишь добавить, что здесь и new не нужен.
kmn>>kmn>>void CPreviewDialog::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
kmn>>{
kmn>> if( lpDrawItemStruct->itemAction & ODA_DRAWENTIRE )
kmn>> {
kmn>> CDC * pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
kmn>> ASSERT_VALID (pDC);
kmn>> CDC memDC;
kmn>> memDC.CreateCompatibleDC(pDC);
kmn>> bmpBig.SetBitmapBits(BUFFER_SIZE, ulBuf);
kmn>> CBitmap* pOldBitmap =(CBitmap*) memDC.SelectObject(bmpBig);
kmn>> ::BitBlt(lpDrawItemStruct->hDC,0,0, IMAGE_WIDTH,IMAGE_HEGTH, memDC, 0, 0, SRCCOPY);
kmn>> memDC.SelectObject(pOldBitmap);
kmn>> memDC.DeleteDC();
kmn>> }
kmn>>}
kmn>>
А>Вот если сделать так :
А>А> CDC * pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
А> ASSERT_VALID (pDC);
А>
А>то тогда вообще ничего не рисуется.
А>Насчет того , что нет утечки под Win2000 , видно системным монитром.
Win2000 Когда запускает программу выделяет ей куссок памяти определённого размера.
В результате программа работает в своём адресном пространстве.В нем же выделяет память и оператор new.
Когда прога завершает работу ОС удаляет эту область памяти. В результате утечка происходит только во время выполнения программы.