¿Por qué falla CreateCompatibleBitmap después de aproximadamente mil ejecuciones?

Estoy tratando de escribir una aplicación de captura / grabación de pantalla. Aquí está la parte del código que captura la pantalla y la guarda:

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);

Después de mil o más repeticiones, mi declaración de cout mostrará el identificador recién creado como 000000000000000 alias. NULO. Mi aplicación funciona bien hasta ese momento.
Estoy eliminando el DC y el mapa de bits creados cada vez para que no haya pérdida de memoria. El Administrador de tareas también confirma que no hay pérdida de memoria. Entonces, ¿qué está pasando?

Gracias por cualquier persona que pueda ayudar en esto.

Respuestas a la pregunta(1)

Su respuesta a la pregunta