关于显示内存位图程序有一些有关问题,希望大家指导一上

关于显示内存位图程序有一些问题,希望大家指导一下
现在有一个自定义的视频文件,可以读出该文件的文件头和每帧的像素数据,现在要把该图片一帧一帧显示出来。下面是程序的一部分,出现的错误有些疑问,希望大家帮忙看看。
case WM_CREATE:
                  imageFile.openFile();//我自己定义的类,打开该视频文件
  width = imageFile.fileHeader.ImageWidth();//读取该视频文件的宽度
  hight = imageFile.fileHeader.ImageHight();//读取该视频文件的高度
  Len = width * hight;
  fbuf = (BYTE*) malloc((Len) * sizeof(BYTE));

  pBitMapInfo = (BITMAPINFO*) Buffer;//前面定义的类型static  BITMAPINFO* pBitMapInfo;
  pBitMapInfo->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
  pBitMapInfo->bmiHeader.biWidth = width;
  pBitMapInfo->bmiHeader.biHeight = hight;
  pBitMapInfo->bmiHeader.biPlanes = 1;
  pBitMapInfo->bmiHeader.biBitCount = 8;
  pBitMapInfo->bmiHeader.biCompression = BI_RGB;

  for(i = 0; i < 256; i++)
  {
  BYTE byGray = (BYTE)i;
  pBitMapInfo->bmiColors[i].rgbRed = byGray;
  pBitMapInfo->bmiColors[i].rgbGreen = byGray;
  pBitMapInfo->bmiColors[i].rgbBlue = byGray;
  }
  return 0;
     case WM_PAINT :
                   hdc = BeginPaint (hwnd, &ps) ;
  imageFile.frameData.SetFrame(frame);//定位到该视频的frame帧,视频只有47帧,frame<=47
  for(i = 0; i < Len;i++)
  {
  pixelData = imageFile.frameData.PxielData();//pixelData存储每像素的数据,每像素用16位表示
  fbuf[i] = LOBYTE(pixelData); //只显示该视频像素的低八位
  }
 //TextOut(hdc, 0, 0, szBuffer,wsprintf(szBuffer, TEXT("%5d"), width));
 SetDIBitsToDevice(hdc,
0,
0,
width,
hight,
0,
0,
0,
hight,
fbuf,
pBitMapInfo,
DIB_RGB_COLORS
);
 //TextOut(hdc,400,10,szBuffer,wsprintf(szBuffer, TEXT("%5d"),frame));
  frame++;
  //free(fbuf);
  Sleep(100);
  if(frame <= 47)
  {
InvalidateRect(hwnd,NULL,false);
  }
  EndPaint (hwnd, &ps) ;
return 0 ;

程序这样写的话运行时错误,提示"0x00403ecd"指令引用的"0xccccccd8"内存,该内存不能为"read"

程序改成这样的话就能正常运行
  switch (message)
     {
     case WM_CREATE:
          
  return 0;
     case WM_PAINT :
         hdc = BeginPaint (hwnd, &ps) ;
 imageFile.openFile();
  width = imageFile.fileHeader.ImageWidth();
  hight = imageFile.fileHeader.ImageHight();
  Len = width * hight;
  fbuf = (BYTE*) malloc((Len) * sizeof(BYTE));
  imageFile.frameData.SetFrame(frame);
  for(i = 0; i < Len;i++)