#include <iostream>
#include<cstring>
using namespace std;
char *getname(void);
int main()
{
char *name;
name= getname();
cout <<name<<" is in "<<(int *)name<<endl;
delete [] name;
name =getname();
cout<<name<<" now in "<<(int * )name<<endl;
}
char *getname()
{
char tmp[80];
cin>>tmp;
char *pn=new char[strlen(tmp)+1];
strcpy(pn,tmp);
return pn;
}
【程序说明】
函数getname(),它使用cin将输入的单词放到tmp数组中,然后使用new分配新内存,以储存该单词。获得空间后,getname()使用标准库函数strcpy()将tmp复制到新的内存块中。最后函数返回pn,这是字符串的副本地址。
在main函数中返回值(指针)被赋给指针name,name指针是在main()函数中定义的。但它指向getname()函数中分配的内存块。然后程序打印该字符串和地址。
接下来,在释放name指向的内存块后,main()再次调用getmame()。(c++不保证新释放的内存就是下一次使用new时选择的内存。)
【总结】
getname()分配内存,main()释放内存,new和delete在不同的函数中!