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的地址回到字符串的首地址。为什么这样就是释放了空间呢?????