C陷阱与缺陷 第7章 可移植性缺陷 7.10 首先释放,然后重新分配

    首先释放,然后重新分配
    C语言实现都为使用人员提供了3个内存分配函数:malloc、realloc和free。malloc(n)将返回一个指针,指向一块新分配的可以容纳n个字符的内存,编程人员可以使用这块内存。free将释放malloc分配的内存,方式是通过把malloc函数返回的指针作为参数传递给free函数。realloc需要把指向一块内存已分配内存的区域指针以及这块内存新的大小作为参数传入,就可以调整(扩大或缩小)这块内存区域为新的大小,这个过程中有可能涉及内存的复制。 
    内存重分配(reallocation) 
    这一实现允许某内存块被释放之后重新分配其大小,前提是内存重分配(reallocation)操作执行得必须足够早。(UNIX)
    例如,下面的代码就是合法的: 
    free(p);
    p = realloc(p, newsize);
    释放一个链表中的所有元素: 
    for (p = head; p != NULL; p = p->next) {
        free((char *)p)
    }
    这里,我们不必担心调用free之后,会使p->next变得无效。当然,这种技巧不值得推荐。(有可能在其它系统上失败)

    /*
    ** 各系统都能正常释放内存。 
    */
    for( p = head; p; p = tmp ){
        tmp = p->next;
        free( p );
    } 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_40186813

你的能量无可限量。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值