| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 312 人关注过本帖
标题:free()函数释放疑问求解答。。。
取消只看楼主 加入收藏
朔源
Rank: 1
等 级:新手上路
帖 子:105
专家分:4
注 册:2015-9-22
结帖率:90%
收藏
已结贴  问题点数:20 回复次数:0 
free()函数释放疑问求解答。。。
程序是书上答案,要写个函数 New() 对 n 个字符开辟连续的存储空间。函数返回指针,指向字符串开始的空间。
写个函数 free() 对将New()函数占用的空间释放。
主要疑问在最后一句。。。。。。
char ch[1000];//定义足够大的连续空间
char* pch = ch;//把字符串的首地址给指针变量pch
char *New(n)//函数不完整,n没有定义。 这函数只是对 n个字符开辟连续的存储空间。
{
    if(pch+n <= ch+1000)//pch+n要小于ch+1000开辟的连续空间
    {
        pch = pch+n;//把pch+n的地址给pch。
        return(pch-n);//pch的原来地址是字符串的首地址,现在是pch+n的地址,pch-n是把pch的地址返回给函数。
    }
    else return(NULL);//如果pch+n大于ch+1000的连续空间了。则不能再进行连续空间的分配了。返回NULL。
}
free(char *p)//p接收的地址应该就是New()函数的返回值,它是释放上面开辟的内存空间的。
{
    if((p >= ch) && (p <= ch+1000))//p要在连续空间的范围内。
        pch = p;//可是为什么把 p的地址再给一次pch 这内存空间就被释放了呢?
}

pch = p;//可是为什么把 p的地址再给一次pch 这内存空间就被释放了呢?函数运行把 pch 变到了字符串的尾部位置,p 接收的是字符串的首地址,
          把 p 赋给 pch。就是让pch的地址回到字符串的首地址。为什么这样就是释放了空间呢?????
2015-11-25 11:32
快速回复:free()函数释放疑问求解答。。。
数据加载中...
 
   



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

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