标题:关于内存分配,实现自己的malloc和free函数
只看楼主
xx3845182
该用户已被删除
已结贴  问题点数:20 回复次数:10 
关于内存分配,实现自己的malloc和free函数
提示: 作者被禁止或删除 内容自动屏蔽
搜索更多相关主题的帖子: 内存 free malloc 函数 
2010-05-02 01:58
呜呼哀哉
该用户已被删除
得分:2 
提示: 作者被禁止或删除 内容自动屏蔽
2010-05-02 18:21
xx3845182
该用户已被删除
得分:0 
回复 2楼 呜呼哀哉
提示: 作者被禁止或删除 内容自动屏蔽
2010-05-03 14:07
rib
Rank: 4
等 级:业余侠客
帖 子:95
专家分:252
注 册:2009-3-30
得分:2 
这是让你自己写malloc函数和free函数
还是要做什么
2010-05-03 14:30
南国利剑
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:29
帖 子:1165
专家分:3536
注 册:2010-4-12
得分:2 
回复 楼主 xx3845182
首先告诉楼主,内存中有堆区和栈区两种,堆区是静态区,存储在里面的数据的生存期一般是整个程序的运行时间,而栈区是动态区,存储在其中的数据一般是动态的局部变量。
我们动态申请的内存是在静态即堆区里的,它并不会因为某个函数运行完了而自动释放,也不会因为主函数的结束而释放,但是一旦主函数结束了,而你没有在之前释放申请得到的空间,那么这片内存没有还给操作系统,数据也还在,但是它的指针(变量)已经消亡,我们也就无法访问这片内存了,这就造成了内存泄露。如果是一个大的程序连续出现内存泄露,那么很快内存就会耗尽,这是很危险的。
所以切记,malloc和free是成对出现的。
以下是一个例子:
程序代码:
#include<stdio.h>
#include<stdlib.h>

int main()
{
    int *n;
    n=(int*)malloc(sizeof(int));
    printf("请输入一个整数:");
    scanf("%d",n);
    printf("%d\n",*n);
    getchar();
    free(n);
    return 1;
}
还可以动态申请数组空间。你看看课本里头有详细的说明。


[ 本帖最后由 南国利剑 于 2010-5-4 12:58 编辑 ]

南国利剑
2010-05-04 12:53
flyue
Rank: 10Rank: 10Rank: 10
来 自:江南西道
等 级:贵宾
威 望:19
帖 子:3465
专家分:1563
注 册:2006-6-20
得分:2 
实现malloc和free不是件很容易的事. 可以参考下内存块技术(Memory Block)

天之道,损有余而补不足.人之道则不然,损不足以奉有余.孰能有余以奉天下,唯有道者.
2010-05-04 12:55
llooppzhang
Rank: 7Rank: 7Rank: 7
来 自:江苏
等 级:黑侠
威 望:5
帖 子:308
专家分:518
注 册:2009-10-18
得分:2 

2010-05-04 13:59
liyang0430
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:98
专家分:159
注 册:2009-6-9
得分:2 
5楼的那个free应该在getch前面   n也要定义一下呀!用法我没搞懂!
2010-05-04 16:14
tb861008
该用户已被删除
得分:2 
提示: 作者被禁止或删除 内容自动屏蔽
2010-05-04 18:20
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
得分:0 
回复 6楼 flyue
顶顶,我们也要求实现这个!

~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2010-06-25 22:18



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




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

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