返回信息流造成内存泄露的一种原因,是对指针进行内存分配后,没有释放原有内存就再次给指针赋值,造成原有内存无法访问,进而造成内存泄露。例如:
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的内存是不是就不会泄露了呢?请大家指教!
这是一条镜像帖。来源:北邮人论坛 / cpp / #20450同步于 2009/3/20
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
请教大家一个关于内存泄露的问题
yefans
2009/3/20镜像同步11 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
只要把分配的内存地址记好了
然后记得释放
一般就不会出现内存泄露
int *pInt=new int;
*pInt=1;
int *pInt2=pInt;
pInt=new int; //赋值之前,已经用pInt2记录了上次分配的内存地址,到最后把pInt和pInt2都delete了就没问题
*pInt=2;
【 在 guo 的大作中提到: 】
: 只要把分配的内存地址记好了
: 然后记得释放
: 一般就不会出现内存泄露
: ...................
操作系统是用链表管理被申请的内存,可能会有一份指针变量备份,
如果私自替换指针变量,会不会和操作系统失去联系了,到时想用新指针释放内存,操作系统不认识这个新指针呀?
我不太懂 瞎问问
我觉得按照第二种方法应该不会内存泄露。
memory leak的原因无非就是new出来的内存的指针得不到了或者忘记delete,只要一直知道那块内存地址,就可以随时delete掉。
【 在 yefans 的大作中提到: 】
: 造成内存泄露的一种原因,是对指针进行内存分配后,没有释放原有内存就再次给指针赋值,造成原有内存无法访问,进而造成内存泄露。例如:
: int *pInt=new int;
: *pInt=1;
: ...................
操作系统不会自己瞎耗资源做备份的。
【 在 pigpigping 的大作中提到: 】
: 操作系统是用链表管理被申请的内存,可能会有一份指针变量备份,
: 如果私自替换指针变量,会不会和操作系统失去联系了,到时想用新指针释放内存,操作系统不认识这个新指针呀?
: 我不太懂 瞎问问