同样一个程序,我设置了使用 Static MFC。用Debug,编译运行都没问题。用Release,运行几秒钟,图像刷新就有问题了,随后报错说是内存不够,然后不得不关闭。PS:我在程序中用了Timer,每秒钟让始终刷新一次,看起来就像时钟读数在走。
请教一下,问题出在哪?

解决方案 »

  1.   

    最好是把程序贴出来问题有很多种:
    情况一: 你在程序中用了数据转换,而你新转换的数据没有足够的存储空间,比如应该用ch[16]的地方,你用了ch[2];
    情况二:  你在程序中使用了动态申请空间,但是申请越来越多,并没有及时的释放。 比如 char *p = new char[256];
            这样一直申请下去,程序早晚会挂掉。
    情况三:  如果你没有及时的释放内存,就是满足了条件二的情况下,那么如果你的程序有死循环,或者如SetTimer之类的
             循环,那就会造成不断的申请,VC运行平台都是有一定的内存限制的,这样肯定会出现内存不足的情况的。。
    楼主你自己查下吧
      

  2.   

    检查一下是否有资源泄漏
    boundchecker
      

  3.   


    非常感谢,我也猜测是内存分配之后的清除做的不够干净。我感兴趣的另一个问题是:
    为什么Debug版运行很长时间也不报错,而Release版的只运行几秒钟就出问题?
      

  4.   

    Debug版没优化,运行慢, 如果是F5调试启动的话,更慢
    除了楼上说的以外,看看有没有把必须的代码写到ASSERT(...)里面的
      

  5.   

    检查一下是否有不断申请内存,但没有释放,,特别是类似这种在某些循环内部的动态内存分配while(条件)
    {
        chat chtTable[100] = new char[100];
        ....
    }
      

  6.   

    上面写错了while(条件) 

        char *pchtTable = new char[100]; 
        .... 
    }
      

  7.   

    动态分配的内存除了楼上讲的外,还包括很多,比如HPEN,HDC,HBRUSH...
      

  8.   


    呵呵,好像我确实有不少HBRUSH没释放。我在仔细查查。再多问一句,如果用的是指针型的HBRUSH,为什么还要去释放呢?指针型本身占的就不多啊。
      

  9.   


    有一次Debug版的运行了十多分钟还是没出现问题,
    但是Release一运行就出错,原因何在呢?