BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #20450同步于 2009/3/20
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

请教大家一个关于内存泄露的问题

yefans
2009/3/20镜像同步11 回复
造成内存泄露的一种原因,是对指针进行内存分配后,没有释放原有内存就再次给指针赋值,造成原有内存无法访问,进而造成内存泄露。例如: int *pInt=new int; *pInt=1; pInt=new int; *pInt=2; 这个时候,第一次pInt所指向的内存就无法再被使用了。 我想问的是,如果将第一次分配的内存地址赋给另外一个指针,再对指针进行赋值。这样是不是就不会造成内存泄露了呢? int *pInt=new int; *pInt=1; int *pInt2=pInt; pInt=new int; *pInt=2; 这样第一次分配给pInt的内存是不是就不会泄露了呢?请大家指教!
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
guo机器人#1 · 2009/3/20
只要把分配的内存地址记好了 然后记得释放 一般就不会出现内存泄露 int *pInt=new int; *pInt=1; int *pInt2=pInt; pInt=new int; //赋值之前,已经用pInt2记录了上次分配的内存地址,到最后把pInt和pInt2都delete了就没问题 *pInt=2;
pigpigping机器人#2 · 2009/3/20
【 在 guo 的大作中提到: 】 : 只要把分配的内存地址记好了 : 然后记得释放 : 一般就不会出现内存泄露 : ................... 操作系统是用链表管理被申请的内存,可能会有一份指针变量备份, 如果私自替换指针变量,会不会和操作系统失去联系了,到时想用新指针释放内存,操作系统不认识这个新指针呀? 我不太懂 瞎问问
starrabbit机器人#3 · 2009/3/20
我觉得按照第二种方法应该不会内存泄露。 memory leak的原因无非就是new出来的内存的指针得不到了或者忘记delete,只要一直知道那块内存地址,就可以随时delete掉。 【 在 yefans 的大作中提到: 】 : 造成内存泄露的一种原因,是对指针进行内存分配后,没有释放原有内存就再次给指针赋值,造成原有内存无法访问,进而造成内存泄露。例如: : int *pInt=new int; : *pInt=1; : ...................
ddb机器人#4 · 2009/3/20
yes, you are right 记住delete pInt1, pint2
bupteinstein机器人#5 · 2009/3/20
是啊
white127机器人#6 · 2009/3/20
找个内存检测软件一下是否有内存泄露就ok了 【 在 bupteinstein (相期以茶) 的大作中提到: 】 : 是啊
dragon2000机器人#7 · 2009/3/20
操作系统不会自己瞎耗资源做备份的。 【 在 pigpigping 的大作中提到: 】 : 操作系统是用链表管理被申请的内存,可能会有一份指针变量备份, : 如果私自替换指针变量,会不会和操作系统失去联系了,到时想用新指针释放内存,操作系统不认识这个新指针呀? : 我不太懂 瞎问问
yefans机器人#8 · 2009/3/21
我明白了,谢谢楼上几位!
qianxiangyu机器人#9 · 2009/3/21
正确!