免费注册 查看新帖 |

Chinaunix

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

realloc问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-29 11:27 |只看该作者 |倒序浏览
如果realloc的大小比原先分配的小,是怎么处理的,会不会释放掉部分资源。。

比如:

char *s = malloc(10);
s = realloc(s, 4);

后面的6个字节会不会被释放呢?

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
2 [报告]
发表于 2009-07-29 11:35 |只看该作者
从用户角度来说,是会释放多余部分。
从操作系统角度来说,不一定。

论坛徽章:
0
3 [报告]
发表于 2009-07-29 11:47 |只看该作者
反正我现在不管它了,,只要记住第一次的指针地址,,中间做多少次的realloc都无所谓了,,只要最后记得free就可以了吧。。

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
4 [报告]
发表于 2009-07-29 11:49 |只看该作者
原帖由 maxxfire 于 2009-7-29 11:47 发表
反正我现在不管它了,,只要记住第一次的指针地址,,中间做多少次的realloc都无所谓了,,只要最后记得free就可以了吧。。


仔细看帮助文档,realloc后指针可能会变化的,每次都得用realloc返回的那个

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
5 [报告]
发表于 2009-07-29 12:09 |只看该作者

回复 #1 maxxfire 的帖子

原帖由 maxxfire 于 2009-7-29 11:27 发表
如果realloc的大小比原先分配的小,是怎么处理的,会不会释放掉部分资源。。

比如:

char *s = malloc(10);
s = realloc(s, 4);

后面的6个字节会不会被释放呢?


char* p1 = malloc(1212);
char* p2 = realloc(p1,326);
if (p1==p2) {
    // 没释放
} else {
    // 释放了
}

论坛徽章:
0
6 [报告]
发表于 2009-07-29 12:12 |只看该作者
好像不会释放,会出问题

论坛徽章:
0
7 [报告]
发表于 2009-07-29 12:25 |只看该作者
原帖由 hellioncu 于 2009-7-29 11:49 发表


仔细看帮助文档,realloc后指针可能会变化的,每次都得用realloc返回的那个


恩。。多谢~

论坛徽章:
13
15-16赛季CBA联赛之八一
日期:2016-07-08 21:00:1415-16赛季CBA联赛之同曦
日期:2017-02-15 14:26:1515-16赛季CBA联赛之佛山
日期:2017-02-20 14:19:2615-16赛季CBA联赛之青岛
日期:2017-05-07 16:49:1115-16赛季CBA联赛之广夏
日期:2017-07-30 09:13:1215-16赛季CBA联赛之广东
日期:2018-07-05 22:34:3615-16赛季CBA联赛之江苏
日期:2018-09-03 12:10:2115-16赛季CBA联赛之上海
日期:2018-09-25 03:49:2215-16赛季CBA联赛之广东
日期:2018-09-25 04:09:12
8 [报告]
发表于 2012-08-02 12:17 |只看该作者
realloc增加的部分系统会不会自动清零??还是要自己判断增加了多大的部分,自己memset ??回复 2# hellioncu


   

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
9 [报告]
发表于 2012-08-02 13:33 |只看该作者
_nosay 发表于 2012-08-02 12:17
realloc增加的部分系统会不会自动清零??还是要自己判断增加了多大的部分,自己memset ??回复 2# hellioncu
...


malloc、realloc都不会清零。calloc会清零。
如果确实需要清零,就自己memset,但很多时候没有必要清零

论坛徽章:
0
10 [报告]
发表于 2012-08-02 14:35 |只看该作者
回复 1# maxxfire


    我记得realloc相同大小的时候是不遍的,其它大小基本上都是重新申请的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP