Почему CreateCompatibleBitmap дает сбой после примерно тысячи выполнений?

Я пытаюсь написать приложение для захвата экрана / записи. Вот часть кода, которая захватывает экран и сохраняет его:

width = GetSystemMetrics(SM_CXMAXTRACK)+8;
height = GetSystemMetrics(SM_CYMAXTRACK)-8;

hwindowDC=GetDC(GetDesktopWindow());
hwindowCompatibleDC=CreateCompatibleDC(hwindowDC);
SetStretchBltMode(hwindowCompatibleDC,COLORONCOLOR);  

// create a bitmap
hbwindow = CreateCompatibleBitmap( hwindowDC, width, height);
cout << " handle to newly created bitmap: " << hbwindow << "\n";

SelectObject(hwindowCompatibleDC, hbwindow); //copy from hwindowCompatibleDC to hbwindow
StretchBlt( hwindowCompatibleDC, 0,0, width, height, hwindowDC, 0, 0,width,height, SRCCOPY); //change SRCCOPY to NOTSRCCOPY for wacky colors !

src.create(height,width,CV_8UC4);   
src.empty();
GetDIBits(hwindowCompatibleDC,hbwindow,0,height,src.data,(BITMAPINFO *)&bi,DIB_RGB_COLORS); 


DeleteDC(hwindowCompatibleDC); 
DeleteObject(hbwindow);

После тысячи или более повторений мой оператор cout покажет вновь созданный дескриптор как 000000000000000 aka. ЗНАЧЕНИЕ NULL. Мое приложение прекрасно работает до этого момента.
Я удаляю созданный DC и растровое изображение каждый раз, чтобы не было утечки памяти. Диспетчер задач также подтверждает, что утечки памяти нет. Так что же происходит?

Спасибо за всех, кто может помочь в этом.

Ответы на вопрос(1)

Ваш ответ на вопрос