我的程序为什么吃内存?高手请进!

balas 2003-08-19 10:07:04
做了一个通信方面的程序,在OnTimer中,发送数据到串口,数据是定的,预先分配好了的。用task manager (Windows2000自带的任务管现器)来查看内存,发现启动定时器后,内存按4k一次的方式增长。关闭定时器后就不再增长了。关闭程序后,并没有内存泄漏的提示。
请问这是为什么?长时间用我的程序是不是会把内存用完?
...全文
44 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
fireant25 2003-08-20
  • 打赏
  • 举报
回复
应该是你控件显示中调用了位图之类的
GDI资源,没有释放导致内存增长。每次
重画都会导致一次内存增长。你检查一下
你控件显示的代码。
chenweihello 2003-08-20
  • 打赏
  • 举报
回复
代码贴出来撒,多半是没有及时释放内存
fireant25 2003-08-20
  • 打赏
  • 举报
回复
我以前遇到过这种情况,也是内存狂长,后来查了VC技术内幕才发现
是由于没有释放GDI资源导致的。

摘自VC技术内幕:
在Win32中,GDI占用的是进程的内存,当程序终止时会自动释放。
不过,一个没有释放的GDI位图对象可能会占用很多内存。
fireant25 2003-08-20
  • 打赏
  • 举报
回复
既然你的控件重绘时会导致内存增长,那么可能是
你使用了大量的GDI资源,但是又没有释放,所以会
出现这个问题。例如,你使用了新的pen,一定要释放它。
例子:
CPen pen(PS_SOLID,1,RGB(0,0,0));
CPen* pOldPen=pDC->SelectObject(&pen);
……
pDC->SelectObject(pOldPen); //用完后要释放
wj59 2003-08-20
  • 打赏
  • 举报
回复
应该是
delete []p;
laodie 2003-08-20
  • 打赏
  • 举报
回复
建议看一下:高质量c++/c编程指南,里面对内存释放讲的还不错.
如果你没有我可以发给你,把email留言给我.
balas 2003-08-19
  • 打赏
  • 举报
回复
都错了,都认为我是在OnTimer中分配内存了,我在这里面没有分配内存。我现在知道是什么原因造成的了,因为我自做了一个显示通信状态的控件,在每发一次数据,这个控件就会更新一次显示,估计是它造成的。因为我不启动定时器,拖动窗口动,发现内存也增长。
现在的问题是:为什么在显示时它会增长呢?在显示时,里面没有新增内存,只是重画一次。谁说说看?
思危 2003-08-19
  • 打赏
  • 举报
回复
应该是在OnTimer中不停的分配,所以会出现这种情况
jack_wq 2003-08-19
  • 打赏
  • 举报
回复
程序中一定有内存分配的地方(包括动态和静态变量),在你的OnTimer中,每次都要分配,所以内存会增加,把代码贴出来看看,就知道了
同意!
xiaohedou 2003-08-19
  • 打赏
  • 举报
回复
“来查看内存,发现启动定时器后,内存按4k一次的方式增长。关闭定时器后就不再增长了。”肯定与OnTimer里的函数有关!不要在这里开内存,放在Precreate或构造函数里。
xiaobaolove 2003-08-19
  • 打赏
  • 举报
回复
程序中一定有内存分配的地方(包括动态和静态变量),在你的OnTimer中,每次都要分配,所以内存会增加,把代码贴出来看看,就知道了(同意)

同时跟踪一下程序

joy0861 2003-08-19
  • 打赏
  • 举报
回复
要看你的系统了,2000和XP有较强的容错功能,在98和winme下运行就可能报错了。
houdy 2003-08-19
  • 打赏
  • 举报
回复
贴代码出来看看先。
mfc168 2003-08-19
  • 打赏
  • 举报
回复
程序中一定有内存分配的地方(包括动态和静态变量),在你的OnTimer中,每次都要分配,所以内存会增加,把代码贴出来看看,就知道了
gufengduyu 2003-08-19
  • 打赏
  • 举报
回复
delete p[]
coyer 2003-08-19
  • 打赏
  • 举报
回复
看不出来,需要分析
xtuzi 2003-08-19
  • 打赏
  • 举报
回复
可以长时间运行(72小时)看看到底吃多少内存
另外,VC不报告内存泄露并不表示真的没有。
例如:

char *p = new char[4096]; //申请了4K内存
...
delete p;

实际上内存并没有完全释放。
callwa 2003-08-19
  • 打赏
  • 举报
回复
把代码贴出来看看
不知道你是不是只分配内存没有释放内存
ruihuahan 2003-08-19
  • 打赏
  • 举报
回复
是不是有其他没有释放的资源。
flinming 2003-08-19
  • 打赏
  • 举报
回复
申请内存没有释放!

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧