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

如何判断一个指针指向的内存空间是否被释放

ilovelife
2010/9/19镜像同步33 回复
做项目遇到一个指针错误,情况是这样的,有两个指针 BYTE* pPointer1和BYTE* pPointer2。 pPointer1和pPointer2同指向同一块内存区域,如下所示: pPointer1 = pPointer2 = new BYTE[MAX_SYSTEM_SIZE]; 如果一个地方利用 pPointer2 先将这块内存释放掉了,pPointer2为NULL,可是pPointer1不为NULL,仍然保存着那块内存地址。 这个时候如果有如下所示就会出错。 if(pPointer1 != NULL) { delete pPointer1; pPointer1=NULL; } 所以得先用指针判断一下它所指向的内存空间是否已经被释放掉,有大牛知道怎么判断么?
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
xiecaiji机器人#1 · 2010/9/19
同疑惑
ding328机器人#2 · 2010/9/19
这种用法很诡异。谁new出来的,delete谁就可以了。这两个指针只要有一处保证释放就可以了呀,为什么要两个地方都delete呢。 pPointer1 = pPointer2 = new BYTE[MAX_SYSTEM_SIZE]; 最好理解为 pPointer2 = new BYTE[MAX_SYSTEM_SIZE]; pPointer1 = pPointer2;
ilovelife机器人#3 · 2010/9/19
逻辑很复杂的、代码量极大的工程,你就很难保证new出来的内存是否被释放过 【 在 ding328 的大作中提到: 】 : 这种用法很诡异。谁new出来的,delete谁就可以了。这两个指针只要有一处保证释放就可以了呀,为什么要两个地方都delete呢。 : pPointer1 = pPointer2 = new BYTE[MAX_SYSTEM_SIZE]; : 最好理解为 : ...................
jiangj机器人#4 · 2010/9/19
lz有答案没? 求答案! 我觉得可以用pPointer2 来一起判断 if ( (pPointer1 != NULL)&&(pPointer2 ==NULL) ) { // delete pPointer1; //pPointer2 ==NULL 表明内存已经释放了,不能再释放一次 pPointer1=NULL; } else if (pPointer1 != NULL && (pPointer2!=NULL) ) { delete pPointer1; pPointer1=NULL; pPointer2!=NULL; } 不过感觉这样写的话,pPointer1 和pPointer2 必须一直指向同一个地方的内存,不能去指向其他地址的内存,不然很可能出其他错 或者干脆在前面删除pPointer2时,同时将pPointer1=NULL
ilovelife机器人#5 · 2010/9/19
还没有找到 这个问题对于提高程序健壮性很有帮助啊,呵呵 【 在 jiangj 的大作中提到: 】 : lz有答案没? : 求答案! : 我觉得可以用pPointer2 来判断 : ...................
ilovelife机器人#6 · 2010/9/19
有指针会被销毁的,而且也不在一个函数里,无法赋值或者比较。 我遇到的是,一个类对象new出来的内存,其他几个类对象也使用这块内存。 每个类对象都有一个指针指向这块内存,从而可以对这块内存进行操作。同时也会有类对象被销毁,那么最开始指向它的指针也同时被释放了。 【 在 jiangj 的大作中提到: 】 : lz有答案没? : 求答案! : 我觉得可以用pPointer2 来一起判断 : ...................
arr机器人#7 · 2010/9/19
记得 effective c++中有讲用对象管理内存。不能解决你提的问题,但应该可以很好的避免你说的那个错误
ding328机器人#8 · 2010/9/19
【 在 ilovelife 的大作中提到: 】 : : 有指针会被销毁的,而且也不在一个函数里,无法赋值或者比较。 : 我遇到的是,一个类对象new出来的内存,其他几个类对象也使用这块内存。 : ................... 如果其他的类要对其进行操作,用一个指向指针的指针是否可以。或者把指针封装一下。或者对那块内存的操作和访问都封装成一个类的函数。
jmpesp机器人#9 · 2010/9/19
这个只能自己封装处理 别无他法