请指出以下程序片段的三处错误:
其中一个明显的错误就是if里面的语句,strOut最多只能存储9个字符,后面还要加个'\0',所以是
当然不是在这个函数里释放,而是在调用这个函数的那个函数体里,并且利用完这个函数的返回值以后再去释放strOut空间(delete strOut)。
建议先想好了再往下看。char* teat(char* strIn)
{char strOut[10];
if( strlen( strIn ) <= 10 )
{
strcpy( strOut, strIn);
}
...省略中间处理部分
return strOut;
}
其中一个明显的错误就是if里面的语句,strOut最多只能存储9个字符,后面还要加个'\0',所以是
strlen( strIn ) <= 9还有就是如果if不成立呢,那就直接返回strOut了,这样肯定会有问题,因为StrOut为初始化。所以第二个错误就是需要给if加上else。
第三个错误,比较难以发现,那就是 char strOut[10] 这句话。这样写的话,strOut在函数结束的时候会被销毁,也就是返回的指针存在一个非常严重的生命周期的问题,相当于调用该函数的变量刚刚拿到这个return的值,这个值就立马失效了(给你以后这个指针就被销毁了)。所以应该这样写:if( strlen( strIn ) <= 10 )
{
strcpy( strOut, strIn);
}
else
{
// 省略处理部分
}
char *strOut = new char[10];其实这样还是会有一个隐患,那就是当这个*strOut不再使用的时候需要delete strOut。申请来的内存没有释放掉,会造成内存泄露。
当然不是在这个函数里释放,而是在调用这个函数的那个函数体里,并且利用完这个函数的返回值以后再去释放strOut空间(delete strOut)。