免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4363 | 回复: 1
打印 上一主题 下一主题

下面这段代码把分配的内存释放掉了吗?如何查看分配的内存是否被释放? [复制链接]

论坛徽章:
0
1 [报告]
发表于 2007-07-06 09:30 |显示全部楼层
原帖由 asdf511 于 2007-6-28 17:13 发表于 2楼  
*p = (char *)malloc(24);//这样是不是会有问题呢?


这样倒是没问题的,有时候我们会看到这样的函数

int createXXXX(XXXX** pX);

在函数内部给*pX分配内存。跟这里做的是一样的。


只是楼主的3个free是错的。
p1, p2, p3都是把一个char**强转成char*...... p本身并没有指向分配的内存啊。
也许LZ是想写成类似于p1 = (char*)(*p) ?
那free p2,p3也是不对滴。malloc和free要一一对应。


查看某块内存是否被释放可能没什么好方法吧,有个简单一点的,有点帮助的方法,就是封装malloc和free,malloc出来的内存都填充一个特殊的数,free之后的内存都填充另一个特殊的数。比如VC里debug版本下,malloc出来的就全是CDCDCD....(? 记不清)。 对一个指针来说,可以查看它前后是不是都是这样特殊的数,来判断该内存是否已经被释放。当然这个方法并不是充分的。

如果要严格控制和了解内存的使用情况,可能需要自己实现memory pool了。这样,对于任一指针判断它是否已经被释放,那方法可能就比较多,我没研究过,现在我想到最直白的方法就是另外找一个1/8大小的数组,每一个bit标志pool中每一个字节,哈哈,很丑很丑。

论坛徽章:
0
2 [报告]
发表于 2007-07-06 10:19 |显示全部楼层
原帖由 yupp 于 2007-7-6 10:10 发表于 4楼  
早就越界了。
p指向的是保存有 malloc(24)空间的地址的地址。*p才是正确的空间指针。
free了p就铁定找不到你分配的空间了,顺带你的free还有可能溢出。

起码你也要free(*p1)
p2,p3完全没必要free

这句没懂 :顺带你的free还有可能溢出
free怎么能溢出??
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP