免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: ericqxf
打印 上一主题 下一主题

如何判断指针指向的内存是否被释放掉 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2006-04-29 03:45 |只看该作者
又是回帖不看帖的。
原帖由 isnowran 于 2006-4-28 01:30 发表
自定义一个函数来保证指针释放后为空
[code]
void Free( char*& p )
{
        if( NULL != p )
        {
                free( p );
                p = NULL;
        }
}

int main()
{
        char *p = (char*)malloc(10);
        Free( p );
        char  ...

论坛徽章:
0
12 [报告]
发表于 2006-04-29 07:55 |只看该作者
原帖由 emacsnw 于 2006-4-29 03:45 发表
又是回帖不看帖的。

有什么不妥?除了最后一句char **pp=p不知道有什么用
不过这个只能在C++里用

论坛徽章:
0
13 [报告]
发表于 2006-04-29 09:04 |只看该作者
原帖由 isnowran 于 2006-4-28 17:30 发表
自定义一个函数来保证指针释放后为空
[code]
void Free( char*& p )
{
        if( NULL != p )
        {
                free( p );
                p = NULL;
        }
}

int main()
{
        char *p = (char*)malloc(10);
        Free( p );
        char  ...

这样写虽然p是空的了,但是pp还是指向了一个已经释放了的空间。

LZ的意思是如何判断某个指针指向的数据有没有被其他地方另一个指向相同地方指针给free掉。

论坛徽章:
0
14 [报告]
发表于 2006-04-29 10:26 |只看该作者
这个功能啊,库函数还没有实现,要么说服库的实现在提供这个功能,要么自己实现内存管理函数,
要是在C++里面还比较方便,可以使用智能指针,虽然在C里也可以这样实现,但做的工作可能更多

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
15 [报告]
发表于 2006-04-29 11:08 |只看该作者
我比较同意 flw2 的说法。
不知道楼主为什么要这么做?
你自己释放了没释放你不想好,
就好像如何知道自己穿没穿内裤一样。

不论你穿没穿,你都是看不见的,唯一的办法只有脱了裤子看看,
而脱了裤子之后,再穿上的时候,又看不见了。
因此你还是会怀疑自己是否穿了内裤。

论坛徽章:
0
16 [报告]
发表于 2006-04-29 11:17 |只看该作者
原帖由 wingger 于 2006-4-29 11:08 发表
我比较同意 flw2 的说法。
不知道楼主为什么要这么做?
你自己释放了没释放你不想好,
就好像如何知道自己穿没穿内裤一样。

不论你穿没穿,你都是看不见的,唯一的办法只有脱了裤子看看,
而脱了裤子之后, ...



哈哈,杂会有这样滴比喻。
一看楼主就是比较谨慎之人,有时不要太过谨慎了,要相信自己的程序,相信计算机的执行力度。

论坛徽章:
0
17 [报告]
发表于 2006-04-29 16:02 |只看该作者
可以向一些编译器学学,使用自己的申请和释放接口:在申请时多定义一个头,保存需要的信息,如大小,时间,是否被释放等。释放时检查修改之。最好自己建一个内存池。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
18 [报告]
发表于 2006-04-29 16:09 |只看该作者
原帖由 cu_xh 于 2006-4-29 11:17 发表



哈哈,杂会有这样滴比喻。
一看楼主就是比较谨慎之人,有时不要太过谨慎了,要相信自己的程序,相信计算机的执行力度。

过分的谨慎在医学上叫做“心理强迫症”。

论坛徽章:
0
19 [报告]
发表于 2006-04-29 17:41 |只看该作者
使用智能指针,在指针上再包装一下。

论坛徽章:
0
20 [报告]
发表于 2006-04-30 01:18 |只看该作者
原帖由 isnowran 于 2006-4-28 17:30 发表
自定义一个函数来保证指针释放后为空
[code]
void Free( char*& p )
{
        if( NULL != p )
        {
                free( p );
                p = NULL;
        }
}

int main()
{
        char *p = (char*)malloc(10);
        Free( p );
        char  ...



这个办法不错!
学习^
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP