+ -
当前位置:首页 → 问答吧 → 如何测试一个指针指向的堆内存是否已经被释放

如何测试一个指针指向的堆内存是否已经被释放

时间:2011-11-28

来源:互联网

如题,我用的是GCC的编译器,好像释放成功的话,指针指向的头4个字节的内容会归零,不过后面的内容保持不变,这样我就不知道后面的内存是否已经被释放成功了。还有问一下分配的一整段内存,可不可以只释放其中的一部分,比如分配了5个int的内存,我从第3个int开始把后面都释放掉,只留下前两个int,(不是另开辟内存),这样可以么?

作者: yozola   发布时间: 2011-11-28

释放内存后要把指针致NULL。

可以的。

作者: icechenbing   发布时间: 2011-11-28

这个,楼主可以自己重载new和delete
系统提供的new和delete好像没有这个功能

作者: hnwyllmm   发布时间: 2011-11-28

无法做到。。。不要依赖某个平台的实现

作者: mingliang1212   发布时间: 2011-11-28

你的第二个问题需要传说中的内存池来实现,不然你肯定导致泄露

作者: qscool1987   发布时间: 2011-11-28

引用 1 楼 icechenbing 的回复:
释放内存后要把指针致NULL。

可以的。

这个是在确切知道已经释放成功之后,才把指针重置为0,不过我的问题是怎么判断指针指向的内存已经被完全释放了?或者说已经被释放成功了,有什么测试方法么?
delete [] 是不是只要一释放就把之前分配的整段内存全部释放?若是指针不是指向数组首元素的地址,而是指向数组其他元素的地址,那delete操作是成功还是失败?

作者: yozola   发布时间: 2011-11-28

不是很清楚楼主为什么要自己检测内存释放了没。
如果要自己管理内存,那么:1) pointer = new xxx 2) use pointer 3) delete pointer and pointer = null. 或者用scoped_ptr或者shared_ptr管理内存。使用shared_ptr你自己不用判断是否释放了,什么时候释放,shared_ptr自己会通过引用计数自动管理。

另外,delete[]得是数组的头,见http://topic.csdn.net/t/20020424/16/673147.html。

作者: gelinsipan   发布时间: 2011-11-28

用boundcheck等检测工具

作者: quwei197874   发布时间: 2011-11-28