Code:
  
  CImage tmpImage = pDoc->m_imageArray[0];
     
    int w = tmpImage.GetWidth();
    int h = tmpImage.GetHeight();
    int Bpp = tmpImage.GetBPP();
     
    BITMAPINFOHEADER bmInfohdr;
    bmInfohdr.biSize = sizeof(BITMAPINFOHEADER);
    bmInfohdr.biWidth = w;
    bmInfohdr.biHeight = -h;
    bmInfohdr.biPlanes = 1;
    bmInfohdr.biBitCount = Bpp;
    bmInfohdr.biCompression = BI_RGB;
    bmInfohdr.biSizeImage = w*h*Bpp;
    bmInfohdr.biXPelsPerMeter = 0;
    bmInfohdr.biYPelsPerMeter = 0;
    bmInfohdr.biClrUsed = 0;
    bmInfohdr.biClrImportant = 0;
     
    BITMAPINFO bmInfo;
    bmInfo.bmiHeader = bmInfohdr;
    bmInfo.bmiColors[0].rgbBlue=255;
     
     
            void* pBits = tmpImage.GetBits();
            HANDLE hData = ::GlobalAlloc (GMEM_MOVEABLE, sizeof(BITMAPINFO) + w * h * 3);
            LPVOID pData = (LPVOID) ::GlobalLock (hData);
            LPBYTE p_imagebits;
            p_imagebits  = (LPBYTE)pData + sizeof(BITMAPINFO);
            memcpy(pData,&bmInfo,sizeof(BITMAPINFO));
     
           
            DWORD dwBytes = ((DWORD) w * Bpp) / 32;
                    if(((DWORD) w * Bpp) % 32) {
                            dwBytes++;
                    }
                    dwBytes *= 4;
                    unsigned long m_dwSizeImage = dwBytes * h; // no compression
     
     
            memcpy (p_imagebits, pBits, m_dwSizeImage);
            ::GlobalUnlock (hData);
     
    COleDataSource* pods = new COleDataSource;
    pods->CacheGlobalData (CF_DIB, hData);
    pods->SetClipboard ();

I'm trying to copy the DIB from the CImage into the clipboard. I get an access read violation on the second memcpy. Can anyone explain what I've done wrong?.