标题:malloc 和 free
只看楼主
C_printf
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:102
专家分:122
注 册:2010-1-26
结帖率:100%
已结贴  问题点数:20 回复次数:10 
malloc 和 free
#include  ...
int main()
{
    int* p=(int*)malloc(100*sizeof(int));
    for(int i=0;i<100;i++)
    {
        free(p);
        p++;
    }
    return 0;
}
上面代码是下面图片代码的变形,方便大家理解。
有本书中这样写,前面一次malloc 或者多次realloc之后的地址然后按以下方式free,感觉不符合malloc和free成对出现的原则,是我错了?
不方便试验,先发帖看看大家的意见。
搜索更多相关主题的帖子: free include 
2012-02-18 18:20
mayuebo
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:257
专家分:1282
注 册:2005-9-8
得分:0 
只是释放内存,无所谓用什么方法.只要把不用的内存释放就可以了.

成功贵在坚持
2012-02-18 18:50
爱德华
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:2
帖 子:183
专家分:536
注 册:2011-5-29
得分:0 
上面的例子这么用就是为了释放那个栈所占的存储空间。
 先释放每一个节点,再外围加一个循环.

算法,数据结构,windows核心编程.
2012-02-18 19:00
hnuhsg1226
Rank: 9Rank: 9Rank: 9
来 自:中国
等 级:蜘蛛侠
威 望:2
帖 子:314
专家分:1314
注 册:2011-3-27
得分:0 
成对出现不是说个数要相等,是说有“malloc”就必须有“free”,比如建个链表,你就只需要给链表指针分配一次内存空间吧,但是指针移到后,不就分配多次了吗,因为指针可以任意指向某个地址,“free”的功能就不用多说了,就是释放内存,你分配了多少个,就肯定可以释放多少个

我的地盘
2012-02-18 19:10
小鱼儿c
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:852
专家分:1317
注 册:2011-4-1
得分:10 
程序代码:
int main()
{
    int* p=(int*)malloc(100*sizeof(int));
    for(int i=0;i<100;i++)
    {
        free(p);
        p++;
    }
    return 0;
}
内存管理,在堆上的。。貌似这样释放不合法的啊。
以前写过有关实现模拟实现malloc 。。
只是记得不太清楚了。
实验了 运行就崩溃。。。。。。
看看内存管理就知道了。。。

用心做一件事情就这么简单
2012-02-18 19:16
小鱼儿c
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:852
专家分:1317
注 册:2011-4-1
得分:0 
以下是引用mayuebo在2012-2-18 18:50:42的发言:

只是释放内存,无所谓用什么方法.只要把不用的内存释放就可以了.
这话说的。。。。。。

用心做一件事情就这么简单
2012-02-18 19:16
C_printf
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:102
专家分:122
注 册:2010-1-26
得分:0 
回复 3楼 爱德华
是一次malloc的,不是一个节点一个节点malloc的
2012-02-18 19:48
C_printf
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:102
专家分:122
注 册:2010-1-26
得分:0 
回复 4楼 hnuhsg1226
你的意思是一次malloc的内存可以分段来释放?那free如果知道呢
2012-02-18 19:49
C_printf
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:102
专家分:122
注 册:2010-1-26
得分:0 
回复 5楼 小鱼儿c
.
2012-02-18 19:56
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
得分:10 
这么 free 肯定不对,你再好好看那些代码。
应该有其它函数,循环调用过 malloc,或者有调用 malloc 的函数被循环调用过。
2012-02-18 23:11



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-361137-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.403241 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved