| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 411 人关注过本帖
标题:请教一道指针题的解题思路
只看楼主 加入收藏
cwde
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2011-3-31
结帖率:33.33%
收藏
已结贴  问题点数:20 回复次数:5 
请教一道指针题的解题思路
自学C语言,看到指针那章最后一道题,题目是这样的:
用C语言指针编写一个函数alloc(n) ,用来在内存区开辟一个连续的空间(n个字节)。此函数的返回值是一个指针, 只想新开辟的连续空间的起始地址。 再写一个函数free(p),将起始地址p开始的各单元释放(不能再被程序使用 ,除非再度开辟)。
提示:现在内存区定出一片相当大的连续空间(如1000字节)。然后开辟与释放都在此空间进行。假设指针变量p原已指向未用空间的开头,调用alloc(n)后,开辟了n个字节可供程序适使用。现在需要使 p的值变为p+n,表示空白未用区从p+n地址开始,同时要将开辟区的起始地址(p)作为函数值返回,以表示可以利用从此点开始的单元。如果要开辟的区太大(n大),超过了预想的(1000)字符,则alloc(n)函数返回指针NULL,表示开辟失败。
各位高手帮我看看,这道题的解题思路是什么?
搜索更多相关主题的帖子: 空间 C语言 
2011-04-30 11:36
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:10 
提示里说的不就是解题思路吗。

就是让你自己模拟一下内存的分配和回收算法。
你的程序应该是先调用 malloc 一次性要来 1000b 的空间。之后每次再调用函数时,就不像系统要了,而是你自己想办法用已经分配到手的 1000b 的空间合理利用起来。这个管理空间的方法有很多呀,比如用空闲链表之类的算法。讲操作系统的书都有这方面的内容,算法很清楚,自己实现实现就行了。
2011-04-30 12:26
cwde
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2011-3-31
收藏
得分:0 
二楼,我听不懂你说的,我感觉这个题的意思就是让我自己编写一个malloc函数,你说直接就调用malloc,我直接调用了malloc,那这道题写的内容不就完成了?
2011-04-30 12:39
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
当然不是呀。你只能第一次进入这个函数的时候调用一次 malloc。而且一定是申请 1000 个这么长。

也就是说即使我调用的是 alloc(5) 你也是申 1000,然后从你申的1000里拔5,返回。
你的内存会变成这样(_表示空闲,x表示分配出去了):
xxxxx___________________________________________________

下次我再 alloc(10) 的话,你得从剩下的 995 里拔 10 个给我,不能再 malloc 了。变成:
xxxxxxxxxxxxxxx_________________________________________

如果此时我 free 了早前分配的 5。你得自己记录这 5 个被释放了,而不是调用真正的 free(显然你也不能 free,因为你之前申的1000里还有10个在用)。
_____xxxxxxxxxx_________________________________________

如果我又 alloc(3),你得想办法自已从剩下的 990 里返回来。不管你是返回 15 后面的3个,还是0开始的3个。即:
xxx__xxxxxxxxxx_________________________________________
或者
_____xxxxxxxxxxxxx______________________________________


总之,经过几次分配回收,你一开始要的 1000 就会变得支离破碎,如何管理这些内存就是你的算法要做的事情。
2011-04-30 12:50
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
你再好好看看提示。我觉得你对题目理解的不是很到位。
2011-04-30 12:56
逍遥乖乖
Rank: 2
等 级:论坛游民
帖 子:44
专家分:56
注 册:2011-4-8
收藏
得分:10 
其实这道题你现在可以先放过去,后面的链表学了再回过头看这题会方便很多
2011-04-30 12:57
快速回复:请教一道指针题的解题思路
数据加载中...
 
   



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

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