注册 登录
编程论坛 VC++/MFC

编程导致内存泄露怎么办?

Invariably 发布于 2011-06-07 12:20, 1776 次点击
编程的时候调用malloc函数申请的内存空间,在主函数结束的时候要释放的,但是自己那个时候认识不到位,导致内存泄露,现在机子开的任务稍微多一点就会卡。。。。。
怎么办?怎么才能收回泄露的内存?  别告诉我重装系统。。。。。。呵呵。。。。。
12 回复
#2
zhoufeng19882011-06-07 12:37
程序结束后程序分配的内存都会被操作系统回收的啊。
#3
Invariably2011-06-07 17:52
我记得老师说过,malloc申请的一定要用free释放的,不然那些内存是不能被系统回收的。。。。不知道是不是真的是这样。。。。
#4
hellovfp2011-06-08 12:46
找出代码,修改那个泄露的地方。
#5
Invariably2011-06-08 23:09
我的是win7系统,用的是vc6.0绿色软件,只能编程练习,编完后的程序是打不开的,每次用的时候只能复制一次,这样它就有申请一次。。。。。
现在改,能把以前的那些内存收回吗?
#6
hellovfp2011-06-09 10:51
没用过Win7,如果你的VC6每次写完了就被Win7干掉,换VC2010版,或是其它免费写程序的CB或是装虚拟机+XP+VC6.
#7
Loongwong2012011-06-09 19:18
内存一关机就应该全部被收回了。我个人猜测的
#8
Invariably2011-06-09 23:30
希望是这样的吧。。。。。呵呵。。。。。
#9
duliningmiss2011-06-10 15:34
编程时自己在堆上分配的空间,如果没有用free()或者delete()释放,在程序退出时,操作系统会自动回收你分配的内存。估计你的机器卡不是这方面的原因吧!
#10
hahayezhe2011-06-10 22:10
看看程序运行时占用的CPU比率,
内存泄露不会导致卡,一般是死循环会导致CPU占用100%
#11
Invariably2011-06-12 12:51
知道了,谢谢大家!!!
#12
try_catch2011-06-17 03:45
基本内存泄漏,主要就是用了malloc和new之类分配内存之后没有free掉
还有种情况是overload operator=里面的内存泄漏

内存泄漏很难学,建议你先搞明白两个东西:stack和heap
当你给一个temp variable的时候,那个值是在stack上的,当程序推出当前function的时候,那个是会直接free 掉的
当你创建一个例如array的东西(object1 *p1 = new object1())的时候,那个object是在heap上的,你要手动free掉
#13
pba1100100332011-06-17 18:21
用完了动态分配的对象或对象的数组后,一定要显式的释放这些内存。不然就会出现内存泄露的问题。
1