请帮我看看这个字符串拷贝的小函数。
inline void mstrcpy(char * (& dest),char * src)
{
if(dest!=NULL)
delete [] dest;
int l=strlen(src)+1;
dest=new char[l];
strcpy(dest,src);
dest[l-1]='\0';
}
请问这个函数有什么问题吗?我对指针不太有把握,又不知道哪本书好一些。在一个函数里把另一个函数new出来的字符串delete掉再重新new会导致问题吗?如果dest在主函数里是用char * temp="lksdf"这样的形式初始化的,在这里delete会导致问题吗?
问题点数:30、回复次数:6Top
1 楼caoguangxin(广昕)回复于 2002-04-02 10:41:18 得分 10
1:char * (& dest)应该是char * dest吧?
2:在if(dest!=NULL)好象是有点问题的,你在其他什么地方会设dest=NULL吗?如果没有,那你这个判断的结果是未知的。
Top
2 楼kingcaiyao(aking)回复于 2002-04-02 10:47:00 得分 10
如果你在调用程序(宿主程序)中是这样的话:
char *temp="ldkdk";
然后你将temp当作入参数传递给这个函数,那么删除时会出错。Top
3 楼luanma1978(乱马)回复于 2002-04-02 10:49:54 得分 10
new出来字符串在可以访问到它的地方都可以 delete。
inline void mstrcpy(char & dest,char * src)
{
if(dest!=NULL)
delete dest;
int l=strlen(src)+1;
dest=new char[l];
strcpy(dest,src);
dest[l-1]='\0';
}
或者
inline void mstrcpy(char * dest,char * src)
{
if(dest!=NULL)
delete dest;
int l=strlen(src)+1;
dest=new char[l];
strcpy(dest,src);
dest[l-1]='\0';
}
Top
4 楼luanma1978(乱马)回复于 2002-04-02 10:51:18 得分 0
char * temp="lksdf"这样的形式初始化的,在这里delete会导致问题吗?
这是错的!!
delete 必须与new配对使用!!
因为无new 所以不能deleteTop
5 楼kingcaiyao(aking)回复于 2002-04-02 10:51:49 得分 0
如果dest是指向一片内存区域,则可以用delete进行删除,而现在dest只是一个指针,这样当然会出错
dest既然是一指针,怎么可以用&地址符,这里也是错误的Top
6 楼acneyouth(豆子)回复于 2002-04-02 11:03:54 得分 0
谢谢大家,另外,我以为char *(& dest)表示dest是一个"字符指针的引用",难道这不对吗?那"字符指针的引用"该怎么声明呢?Top




