怎么判断一个空间被释放掉了.

zhulinjia 2008-10-26 04:01:17
怎么判断一个空间被释放掉了..







怎么判断一个空间被释放掉了...
...全文
248 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
Super.Jiju 2008-10-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 Leejun527 的回复:]
如果能养成好习惯在free(p)之后让p = NULL,以后你自然就知道指针p是否已经释放了。
[/Quote]

正解诶
JackyRao 2008-10-29
  • 打赏
  • 举报
回复
Good programming style is good things to this problem.
xtting_8984313 2008-10-27
  • 打赏
  • 举报
回复
1、写一个宏,所有的删除用这个hong
#SAFE_DEL(P) if(P){delete P; P=NUll}
这样就保障不会有野指针。当然前提是对所有指针正确的初始化。

2、使用引用计数(智能指针)
dreamer_shax 2008-10-27
  • 打赏
  • 举报
回复
记住了,确实应该这样
weishifenke 2008-10-27
  • 打赏
  • 举报
回复
好的习惯要学习,顶
insmile 2008-10-26
  • 打赏
  • 举报
回复
学习
insuya 2008-10-26
  • 打赏
  • 举报
回复
释放之后指针手动指向NULL
之后在根据判断指针是否为空呗

就是自己记着点!!!!
春江花月园 2008-10-26
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 jackzhhuang 的回复:]
楼上各位说的都对。

楼主非要知道某个内存可不可读,可以用这个函数:
IsBadReadPtr()
详见MSDN
[/Quote]
学习了
budweiser 2008-10-26
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 jackzhhuang 的回复:]
楼上各位说的都对。

楼主非要知道某个内存可不可读,可以用这个函数:
IsBadReadPtr()
详见MSDN
[/Quote]

这种方法好像也不是万能的
冰山之海 2008-10-26
  • 打赏
  • 举报
回复
自己写一个new 的重载函数和delete的重载函数,函数体里用一个数组或自己定义一下数据结构把你开辟的内存记录下来,delete的时候又把记录去掉,最后写一个打印就知道自己那些内存没有清理

void* operator new(size_t size)
{
void* p = malloc(size);
//把p的地址记来的,再把size记下来,做一个结构体,把__LINE__ 和__FILE__记下来也行
return p;
}

delete操作同样 删掉自己的相应记录就可以了
kingofice 2008-10-26
  • 打赏
  • 举报
回复
3楼、4楼正解。
如果有很好的,对原有代码不做改变,不付出代价(性能,或者工作量)就能检查内存是否已经被释放过,那么,内存泄漏这个老大难问题早就解决了。
所以,最好的办法是养成习惯,不要出现野指针,切记让new与delete或者malloc与free配对。
冻结 2008-10-26
  • 打赏
  • 举报
回复
再delete一次,会编译错误。
机智的呆呆 2008-10-26
  • 打赏
  • 举报
回复
楼主到msdn 搜跟_CrtIsValidHeapPointer 有关的函数吧~~~~
program2050 2008-10-26
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wuyu637 的回复:]
int main()
{
int * t = new int[10];


cout < < "hello world" < < endl;

if(t !=NULL)
{
delete []t;
t = NULL;
}


}

一旦释放掉一个指针,就把这个指针赋值为null,
每次释放之前检查指针的值是否为空。
[/Quote]
好习惯
gulangduxing 2008-10-26
  • 打赏
  • 举报
回复
学习ing
jackzhhuang 2008-10-26
  • 打赏
  • 举报
回复
楼上各位说的都对。

楼主非要知道某个内存可不可读,可以用这个函数:
IsBadReadPtr()
详见MSDN
ok208043624 2008-10-26
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wuyu637 的回复:]
int main()
{
int * t = new int[10];


cout < < "hello world" < < endl;

if(t !=NULL)
{
delete []t;
t = NULL;
}


}

一旦释放掉一个指针,就把这个指针赋值为null,
每次释放之前检查指针的值是否为空。
[/Quote]
fenghuijun135 2008-10-26
  • 打赏
  • 举报
回复
学习
jone33 2008-10-26
  • 打赏
  • 举报
回复
判定你那个对象是否为NULL,如果你是用New申请的就Free它,并将它置为NULL
如果你是用Malloc申请的就Delete它,并将它置为NULL
visame 2008-10-26
  • 打赏
  • 举报
回复
YES
这是一个好习惯

一旦释放掉一个指针,就把这个指针赋值为null,
每次释放之前检查指针的值是否为空。
加载更多回复(6)

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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