在截图里,动态生成数据 size=1024*768
lpData=new char[size];
运行到这行语句,VC出现提示“内存不足”
不知道为什么?我的机子512M内存,重启之后立即运行该程序,还是会出现这问题,请问有什么解决办法?(数组最好动态生成,因为分辨率各机子不同)

解决方案 »

  1.   

    不过偶256的内存已经用了500M,然后新建了一个MDI,运行也没事
    或许是在循环里的?又没有delete[] lpData?
      

  2.   

    CBitmap bm;//创建位图
    int Width=GetSystemMetrics(SM_CXSCREEN);
    int Height=GetSystemMetrics(SM_CYSCREEN);
    bm.CreateCompatibleBitmap(&dc,Width,Height); CDC tdc;//内存位图
    tdc.CreateCompatibleDC(&dc);
    CBitmap*pOld=tdc.SelectObject(&bm);
    tdc.BitBlt(0,0,Width,Height,&dc,0,0,SRCCOPY);
    tdc.SelectObject(pOld);

    bm.GetBitmap(&btm);//保存信息至btm
     size=btm.bmWidthBytes*btm.bmHeight; lpData=new char[size]; 
    运行到此处。。就进入catch了,发生异常,最后输出内存不足
      

  3.   

    我是刚运行就这样了 还没循环一次…………
    循环一次之后有delete lpData
      

  4.   

    如果是在ondraw中,每次刷新时系统都会调用,又没有释放资源,会down
      

  5.   

    不是在ondraw中,debug时是第一次进行该函数的
      

  6.   

    size=btm.bmWidthBytes*btm.bmHeight??
    bmWidthBytes是什么?还是bmWidth??
      

  7.   

    弄不好bmWidthBytes也没有初始化
      

  8.   

    可以确认btm.bmWidthBytes*btm.bmHeight的值都没问题?
    你的代码没有对返回值进行错误检查就继续执行,不是好习惯.你的size是不是定义的是short类型的?感觉很像是这样的.太短了.
      

  9.   

    谢谢 softrain(敢笑杨过不痴情)
    经调试btm.bmWidthBytes,btm.bmHeight为 -858993460
    但是 size=687194768 我的size类型是int还有就是这段代码是另外一个程序可以运行 我把它移值到我的程序里面
    却出错了
      

  10.   

    由此证实是btm.bmWidthBytes,btm.bmHeight问题…………
      

  11.   

    是 以后会注意的 但是我前面是两句是CDC dc;//屏幕DC
    dc.CreateDC("DISPLAY",NULL,NULL,NULL);
    怎么就截不到图呢,在原程序是正确的啊!
      

  12.   

    楼主为什么new char?你能保证图象的pixelformat是8吗?
      

  13.   

    size=btm.bmWidthBytes*btm.bmHeight;//显然这里得到的数值太大了。lpData=new char[size];