Debug版本没问题, Release版报错:内存不够 同样一个程序,我设置了使用 Static MFC。用Debug,编译运行都没问题。用Release,运行几秒钟,图像刷新就有问题了,随后报错说是内存不够,然后不得不关闭。PS:我在程序中用了Timer,每秒钟让始终刷新一次,看起来就像时钟读数在走。请教一下,问题出在哪? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 最好是把程序贴出来问题有很多种:情况一: 你在程序中用了数据转换,而你新转换的数据没有足够的存储空间,比如应该用ch[16]的地方,你用了ch[2];情况二: 你在程序中使用了动态申请空间,但是申请越来越多,并没有及时的释放。 比如 char *p = new char[256]; 这样一直申请下去,程序早晚会挂掉。情况三: 如果你没有及时的释放内存,就是满足了条件二的情况下,那么如果你的程序有死循环,或者如SetTimer之类的 循环,那就会造成不断的申请,VC运行平台都是有一定的内存限制的,这样肯定会出现内存不足的情况的。。楼主你自己查下吧 检查一下是否有资源泄漏boundchecker 非常感谢,我也猜测是内存分配之后的清除做的不够干净。我感兴趣的另一个问题是:为什么Debug版运行很长时间也不报错,而Release版的只运行几秒钟就出问题? Debug版没优化,运行慢, 如果是F5调试启动的话,更慢除了楼上说的以外,看看有没有把必须的代码写到ASSERT(...)里面的 检查一下是否有不断申请内存,但没有释放,,特别是类似这种在某些循环内部的动态内存分配while(条件){ chat chtTable[100] = new char[100]; ....} 上面写错了while(条件) { char *pchtTable = new char[100]; .... } 动态分配的内存除了楼上讲的外,还包括很多,比如HPEN,HDC,HBRUSH... 呵呵,好像我确实有不少HBRUSH没释放。我在仔细查查。再多问一句,如果用的是指针型的HBRUSH,为什么还要去释放呢?指针型本身占的就不多啊。 有一次Debug版的运行了十多分钟还是没出现问题,但是Release一运行就出错,原因何在呢? Win32 程序與 Driver 通訊 DeviceIoControl ,BufferIO 時,輸出指針是哪個參數? 来点新鲜的!!各位来看! IP首部定义的问题 来者有分,望大家各舒已见,有什么方法可以使得在安全模式下不可删除执行文件 一个非常简单的问题 哪位大哥大姐有关于运动分析的原程序,急需 如何统计某个目录下某种类型文件的个数?<><><><><><><><><><><><><> 初学撒分!!! 请问如何使一位图绕椭圆,矩形转动?等待您的回复~! 下面的SQL语句该怎么写,请各位帮帮忙了,很简单的! 谁有 Windows核心编程 第五版? 电子书 重载CWnd成员函数报错
情况一: 你在程序中用了数据转换,而你新转换的数据没有足够的存储空间,比如应该用ch[16]的地方,你用了ch[2];
情况二: 你在程序中使用了动态申请空间,但是申请越来越多,并没有及时的释放。 比如 char *p = new char[256];
这样一直申请下去,程序早晚会挂掉。
情况三: 如果你没有及时的释放内存,就是满足了条件二的情况下,那么如果你的程序有死循环,或者如SetTimer之类的
循环,那就会造成不断的申请,VC运行平台都是有一定的内存限制的,这样肯定会出现内存不足的情况的。。
楼主你自己查下吧
boundchecker
非常感谢,我也猜测是内存分配之后的清除做的不够干净。我感兴趣的另一个问题是:
为什么Debug版运行很长时间也不报错,而Release版的只运行几秒钟就出问题?
除了楼上说的以外,看看有没有把必须的代码写到ASSERT(...)里面的
{
chat chtTable[100] = new char[100];
....
}
{
char *pchtTable = new char[100];
....
}
呵呵,好像我确实有不少HBRUSH没释放。我在仔细查查。再多问一句,如果用的是指针型的HBRUSH,为什么还要去释放呢?指针型本身占的就不多啊。
有一次Debug版的运行了十多分钟还是没出现问题,
但是Release一运行就出错,原因何在呢?