new 失败! 在一个循环中不断的得到BITMAP然后用GetDIBits得到位图的位数据当BITMAPINFO.bmiHeader.biBitCount设为16或32 时程序没有问题但设为 8 时 程序崩溃在一个new 操作(前几次循环没有崩溃) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 bitmap的内存是怎么分配的,相关代码能不能贴出来看看 int nBitCount = 8;// pBitData->s_info.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); pBitData->s_info.bmiHeader.biWidth = m_nWidth; pBitData->s_info.bmiHeader.biHeight = m_nHeight; pBitData->s_info.bmiHeader.biPlanes = 1; pBitData->s_info.bmiHeader.biBitCount = nBitCount; pBitData->s_info.bmiHeader.biCompression= BI_RGB; pBitData->s_info.bmiHeader.biXPelsPerMeter=0; pBitData->s_info.bmiHeader.biYPelsPerMeter=0; if(nBitCount<16) { pBitData->s_info.bmiHeader.biClrUsed=pBitData->s_info.bmiHeader.biClrImportant =(1<<nBitCount); } else { pBitData->s_info.bmiHeader.biClrUsed=pBitData->s_info.bmiHeader.biClrImportant=0; }/**/ pBitData->s_info.bmiHeader.biSizeImage = (((m_nWidth*nBitCount+31)/32)*4)*m_nHeight; pBitData ->s_size = pBitData->s_info.bmiHeader.biSizeImage;//位图大小 pBitData ->s_bits = new char[pBitData ->s_size]; //为位图数据分配空间 //获取位图的位数据 int re = GetDIBits(m_hMemDC,hBmp, 0,m_nHeight,pBitData->s_bits, &pBitData->s_info,DIB_RGB_COLORS); 这一部分代码在循环中 你这调试到这的时候有没有看看 pBitData ->s_bits = new char[pBitData ->s_size] 这个s_size的值是否正确? 建议用GetLastError()看看到底是什么错,如果前几次循环没有崩溃,有可能是程序其他地方有泄露,导致堆栈空间不足 new 操作的时候,会检查内存空间是否出现问题,可能是别的地方导致内存出现问题了使用 assert(_CrtCheckMemory()) 在内存操作前后检查一下内存是否出现问题吧 我猜测你的pBitData是一个自定义的结构,包括了文件头信息头和位图数据区~~估计你忘了还有调色板~~你的pBitData结构定义贴一下看看。 PPT格式是如何转换为SWF的,网上有类似的开源软件吗? 急!LNK2001:错误 在unicode下用new报错 求助:vc中的程序插入断点,然后点击go调试运行,一直没有响应 抓的图怎样存为一个BMP文件 CSocket 多线程 我想送我朋友1000分,该怎么送啊? 请高手指点一下! 高分求在atl进程外服务中使用cout及printf向屏幕输出的方法 release版单步调试位置出错 新手做的计算器 有问题待解决 对话框上放个计时器,高手帮下,谢谢了
int nBitCount = 8;//
pBitData->s_info.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
pBitData->s_info.bmiHeader.biWidth = m_nWidth;
pBitData->s_info.bmiHeader.biHeight = m_nHeight;
pBitData->s_info.bmiHeader.biPlanes = 1;
pBitData->s_info.bmiHeader.biBitCount = nBitCount;
pBitData->s_info.bmiHeader.biCompression= BI_RGB;
pBitData->s_info.bmiHeader.biXPelsPerMeter=0;
pBitData->s_info.bmiHeader.biYPelsPerMeter=0;
if(nBitCount<16)
{
pBitData->s_info.bmiHeader.biClrUsed=pBitData->s_info.bmiHeader.biClrImportant
=(1<<nBitCount);
}
else
{
pBitData->s_info.bmiHeader.biClrUsed=pBitData->s_info.bmiHeader.biClrImportant=0;
}/**/
pBitData->s_info.bmiHeader.biSizeImage =
(((m_nWidth*nBitCount+31)/32)*4)*m_nHeight;
pBitData ->s_size = pBitData->s_info.bmiHeader.biSizeImage;//位图大小
pBitData ->s_bits = new char[pBitData ->s_size]; //为位图数据分配空间
//获取位图的位数据
int re = GetDIBits(m_hMemDC,hBmp,
0,m_nHeight,pBitData->s_bits,
&pBitData->s_info,DIB_RGB_COLORS);
这一部分代码在循环中
估计你忘了还有调色板~~你的pBitData结构定义贴一下看看。